Hibernate中的緩存機制

在向大家詳細介紹Hibernate二級緩存之前,首先讓大家瞭解下一級緩存,然後全面介紹Hibernate二級緩存。
1:Hibernate中提供了兩級Cache,第一級別的緩存是Session級別的緩存,它是屬於事務範圍的緩存。
這一級別的緩存由hibernate管理的,一般情況下無需進行干預;
第二級別的緩存是SessionFactory級別的緩存,它是屬於進程範圍或羣集範圍的緩存。這一級別的緩存可以進行配置和更改,並且可以動態加載和卸載。 

Hibernate還爲查詢結果提供了一個查詢緩存,它依賴於第二級緩存。

一. 一級緩存和二級緩存的比較:  

第一級緩存 第二級緩存:存放數據的形式相互關聯的持久化對象 對象的散裝數據 緩存的範圍事務範圍,每個事務都有單獨的第一級緩存進程範圍或集羣範圍,緩存被同一個進程或集羣範圍內的所有事務共享併發訪問策略由於每個事務都擁有單獨的第一級緩存,不會出現併發問題,無需提供併發訪問策略由於多個事務會同時訪問第二級緩存中相同數據,因此必須提供適當的併發訪問策略,來保證特定的事務隔離級別數據過期策略沒有提供數據過期策略。

處於一級緩存中的對象永遠不會過期,除非應用程序顯式清空緩存或者清除特定的對象必須提供數據過期策略,如基於內存的緩存中的對象的最大數目,允許對象處於緩存中的最長時間,以及允許對象處於緩存中的最長空閒時間物理存儲介質內存內存和硬盤。對象的 散裝數據首先存放在基於內存的緩存中,當內存中對象的數目達到數據過期策略中指定上限時,就會把其餘的對象寫入基於硬盤的緩存中。緩存的軟件實現在Hibernate的Session的實現中包含了緩存的實現由第三方提供,Hibernate僅提供了緩存適配器(CacheProvider)。用於把特定的緩存插件集成到Hibernate中。啓用緩存的方式只要應用程序通過Session接口來執行保存、更新、刪除、加載和查詢數據庫數據的操作,Hibernate就會啓用第一級緩存,把數據庫中的數據以對象的形式拷貝到緩存中,對於批量更新和批量刪除操作,如果不希望啓用第一級緩存,可以繞過Hibernate API,直接通過JDBC API來執行指操作。用戶可以在單個類或類的單個集合的粒度上配置第二級緩存。如果類的實例被經常讀但很少被修改,就可以考慮使用第二級緩存。只有爲某個類或集合配置了第二級緩存,Hibernate在運行時纔會把它的實例加入到第二級緩存中。用戶管理緩存的方式第一級緩存的物理介質爲內存,由於內存容量有限,必須通過恰當的檢索策略和檢索方式來限制加載對象的數目。Session的 evit()方法可以顯式清空緩存中特定對象,但這種方法不值得推薦。第二級緩存的物理介質可以是內存和硬盤,因此第二級緩存可以存放大量的數據,數據過期策略的maxElementsInMemory屬性值可以控制內存中的對象數目。

管理第二級緩存主要包括兩個方面:選擇需要使用第二級緩存的持久類,設置合適的併發訪問策略:選擇緩存適配器,設置合適的數據過期策略。

二. 一級緩存的管理:當應用程序調用Session的save()、update()、savaeOrUpdate()、get()或load(),以及調用查詢接口的 list()、iterate()或filter()方法時,如果在Session緩存中還不存在相應的對象,Hibernate就會把該對象加入到第一級緩存中。當清理緩存時,Hibernate會根據緩存中對象的狀態變化來同步更新數據庫。 Session爲應用程序提供了兩個管理緩存的方法: evict(Object obj):從緩存中清除參數指定的持久化對象。 clear():清空緩存中所有持久化對象。三. Hibernate二級緩存的管理:1. Hibernate二級緩存策略的一般過程如下:1) 條件查詢的時候,總是發出一條select * from table_name where …. (選擇所有字段)這樣的SQL語句查詢數據庫,一次獲得所有的數據對象。2) 把獲得的所有數據對象根據ID放入到第二級緩存中。3) 當Hibernate根據ID訪問數據對象的時候,首先從Session一級緩存中查;查不到,如果配置了二級緩存,那麼從二級緩存中查;查不到,再查詢數據庫,把結果按照ID放入到緩存。4) 刪除、更新、增加數據的時候,同時更新緩存。Hibernate二級緩存策略,是針對於ID查詢的緩存策略,對於條件查詢則毫無作用。爲此,Hibernate提供了針對條件查詢的Query Cache。2. 什麼樣的數據適合存放到第二級緩存中? 1) 很少被修改的數據 2) 不是很重要的數據,允許出現偶爾併發的數據 3) 不會被併發訪問的數據 4) 參考數據,指的是供應用參考的常量數據,它的實例數目有限,它的實例會被許多其他類的實例引用,實例極少或者從來不會被修改。3. 不適合存放到第二級緩存的數據? 1) 經常被修改的數據 2) 財務數據,絕對不允許出現併發 3) 與其他應用共享的數據。4. 常用的緩存插件 Hibernater二級緩存是一個插件,下面是幾種常用的緩存插件:◆EhCache:可作爲進程範圍的緩存,存放數據的物理介質可以是內存或硬盤,對Hibernate的查詢緩存提供了支持。◆OSCache:可作爲進程範圍的緩存,存放數據的物理介質可以是內存或硬盤,提供了豐富的緩存數據過期策略,對Hibernate的查詢緩存提供了支持。◆SwarmCache:可作爲羣集範圍內的緩存,但不支持Hibernate的查詢緩存。◆JBossCache:可作爲羣集範圍內的緩存,支持事務型併發訪問策略,對Hibernate的查詢緩存提供了支持。5. 配置Hibernate二級緩存的主要步驟:1) 選擇需要使用二級緩存的持久化類,設置它的命名緩存的併發訪問策略。這是最值得認真考慮的步驟。2) 選擇合適的緩存插件,然後編輯該插件的配置文件。

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