hibernate緩存

一級緩存它是屬於事務範圍的緩存。這一級別的緩存由hibernate管理的,一般情況下無需進行干預;第二級別的緩存是SessionFactory級別的緩存,
它是屬於進程範圍或羣集範圍的緩存。

一級緩存:Session級別的緩存

   當Session被open時,緩存即被open
   當Session被close時,緩存即被close
   在緩存open到close這段時間,多次加載同一個持久化對象,只有第一次向數據庫發送SQL語句加載,之後的加載都是基於緩存的

   不過Session從打開到關閉的時間很短暫,一般在項目中都是在業務方法開始時打開Session,調用結束後即關閉Session,在如此短暫的瞬間時刻內,多次加載同一個對象的可能性不大,換言之,一級緩存的可用之處也並不大

Session的save()、update()、savaeOrUpdate()、get()或load(),以及調用查詢接口的 list()、iterate()或filter()方法時,
如果在Session緩存中還不存在相應的對象,Hibernate就會把該對象加入到第一級緩存中。
當清理緩存時,Hibernate會根據緩存中對象的狀態變化來同步更新數據庫。 Session爲應用程序提供了兩個管理緩存的方法: 
evict(Object obj):從緩存中清除參數指定的持久化對象。 clear():清空緩存中所有持久化對象。


二級緩存:SessionFactory級別的緩存
   跟Session同理,level2 cache會隨着sessionFactory的打開而打開,關閉而關閉。
   但是在一般的應用程序中,sessionfactory會以單例的形式存在,所以在整個應用程序的生命週期裏,sessionfactory會一直存在。既二級緩存也一直存在直到關閉應用程序。
   
   二級緩存分爲好幾種,簡單來講就是類級別的緩存class-cache和查詢緩存
query-cache.
   前者是以id作爲緩存的key。

   後者是以查詢條件作爲緩存的key。

Hibernate二級緩存策略的一般過程如下:
1) 條件查詢的時候,總是發出一條select * from table_name where …. (選擇所有字段)這樣的SQL語句查詢數據庫,一次獲得所有的數據對象。
2) 把獲得的所有數據對象根據ID放入到第二級緩存中。
3) 當Hibernate根據ID訪問數據對象的時候,首先從Session一級緩存中查;查不到,如果配置了二級緩存,那麼從二級緩存中查;查不到,再查詢數據庫,把結果按照ID放入到緩存。
4) 刪除、更新、增加數據的時候,同時更新緩存。
Hibernate二級緩存策略,是針對於ID查詢的緩存策略,對於條件查詢則毫無作用。爲此,Hibernate提供了針對條件查詢的Query Cache。

發佈了28 篇原創文章 · 獲贊 2 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章