hibernate的二級緩衝

2021-07-09 11:06:07 字數 3563 閱讀 4076

二級緩衝

什麼是二級緩衝?二級緩衝也可以理解為sessionfactory級別的緩衝,sessionfactory是生產session的工廠,那麼我們可不可以這麼理解,session關聯乙個指向資料庫的結果集,那麼下次我在發sql的時候,我發現,sessionfactory裡面已經有了乙個指向這個結果集的語句,那麼我是不是可以直接使用了!

具體來說,二級緩衝並不是由hibernate來提供,是由第三方提供的緩衝外掛程式,通常有以下幾種第三方緩衝外掛程式:

ehcache:可作為程序範圍的快取,存放資料的物理介質可以是記憶體或硬碟,對hibernate的查詢快取提供了支援。

oscache:可作為程序範圍的快取,存放資料的物理介質可以是記憶體或硬碟,提供了豐富的快取資料過期策略,對hibernate的查詢快取提供了支援。

swarmcache:可作為群集範圍內的快取,但不支援hibernate的查詢快取。

jbosscache:可作為群集範圍內的快取,支援事務型併發訪問策略,對hibernate的查詢快取提供了支援。

那麼,哪些資料適合放在二級緩衝中,理解二級緩衝特性之後,我們知道,

1、經常被查詢的資料,這樣的資料需要頻繁訪問資料庫,肯定是非常適合放在緩衝

2、很少併發的資料,什麼意思呢?打個比方,乙個查詢,乙個修改,這樣很可能會造成一種髒讀,或者是幻讀。意思就是你的資料庫的資料可能被修改了,但是設定二級緩衝還沒有及時更新

3、重要的資料,這個不多說

總之,放在二級緩衝中的資料,一般都是不重要的,不經常修改的資料。比如說,選單,比如說許可權。這些都是非常適合放在二級緩衝中,比如說財務資料,工資資料等,這些不建議放在二級緩衝中

我們上面講了二級緩衝是第三方提供的那麼顯然我們需要配置,

首先我們需要在我們的hibernate.cfg.xml中開啟我們的二級緩衝,當然也可能是properties檔案中配置

1

2

3

4

5

6

<propertyname="hibernate.cache.use_second_level_cache">true

<propertyname="hibernate.cache.provider_class">org.hibernate.cache.ehcacheprovider

<propertyname="hibernate.cache.use_query_cache">true

第二步,我們指定是哪個實體類需要二級緩衝

annotations配置

1

2

3

@entity

@cache(usage=cacheconcurrencystrategy.read_write)

@table(name="p_person")

xml配置

1

2

3

<classname="person"table="t_person">

<cacheusage="read-write"/>

<idname="id">

記住xml配置一定是id之前,class之內

還必須有ehcache.xml檔案,這個檔案有興趣大家可以在網上自己看一下,這裡我就不講解,裡面的內容了

配置完之後,我們直接看

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

@test

publicvoid findtesterjihuanchong()

這個時候,我們再看,肯定又是只傳送一條sql語句了。

查詢緩衝

什麼是查詢查詢緩衝。顧明思議它是查詢的時候產生的緩衝,那我們前面講到了二級緩衝,查詢緩衝和二級緩衝是什麼關係?首先查詢緩衝是依賴於二級緩衝的,查詢緩衝一般設定在list()方法中,查詢緩衝是重複查詢使用的緩衝,如果你兩個查詢不一樣,這個存在的緩衝是不起作用的。需要注意的是list()查詢緩衝必須要告訴hibernate,使用查詢緩衝,查詢緩衝才會生效。

setcacheable(true)

ok,看**

1

2

3

4

5

6

7

8

9

10

11

12

13

14

@test

publicvoid findtestlist()

for(person person:person1)

s.gettransaction().commit();

}

到這裡,我們基本上做完了hibernate緩衝,但是緩衝怎麼配置,怎麼使用,要根據實際的專案情況而定,並不是說,配置了二級緩衝一定會提高系統效能。同時,高階的可能也牽涉到緩衝演算法等問題。當然在專案中多犯幾次錯誤,自然就會使用hibenrate緩衝了!

Hibernate 一級 二級緩衝

hibernate緩衝按級別共分為兩種,一級緩衝 session 和二級緩衝 sessionfactory 有的也說是三種,還有一種是查詢緩衝,當然,查詢緩衝是依託於二級緩衝。ok,什麼是緩衝?在記憶體裡開闢一塊空間把本來應該存在硬碟裡面的資料,存在這個空間裡面,將來,需要這塊資料的時候直接在記憶體...

hibernate二級快取

cacheconcurrencystrategy.none cacheconcurrencystrategy.read only 唯讀模式,在此模式下,如果對資料進行更新操作,會有異常 cacheconcurrencystrategy.read write 讀寫模式在更新快取的時候會把快取裡面的資料...

hibernate 二級快取

session快取 一級快取 sql查詢結果快取,由hibernate管理 sessionfactory內建快取,內建快取是hibernate自帶的,用於存放預定義的sql以及hbm.xml描述的元資料,不可解除安裝 sessionfactory外接快取 二級快取 由外部外掛程式提供,外接快取的資料...