Hibernate---快取機制四(一,二級快取的比較)

醉面韋陀發表於2010-03-31
1.一級快取和二級快取的比較:
Hibernate中提供了兩級Cache,第一級別的快取是Session級別的快取,它是屬於事務範圍的快取。這一級別的快取由hibernate管理的,一般情況下無需進行干預;第二級別的快取是SessionFactory級別的快取,它是屬於程式範圍或群集範圍的快取。這一級別的快取可以進行配置和更改,並且可以動態載入和解除安裝。
 
 
第一級快取
第二級快取
存放資料的形式
相互關聯的持久化物件
物件的散裝資料
快取的範圍
事務範圍,每個事務都有單獨的第一級快取
程式範圍或叢集範圍,快取被同一個程式或叢集範圍內的所有事務共享
併發訪問策略
由於每個事務都擁有單獨的第一級快取,不會出現併發問題,無需提供併發訪問策略
由於多個事務會同時訪問第二級快取中相同資料,因此必須提供適當的併發訪問策略,來保證特定的事務隔離級別
資料過期策略
沒有提供資料過期策略。處於一級快取中的物件永遠不會過期,除非應用程式顯式清空快取或者清除特定的物件
必須提供資料過期策略,如基於記憶體的快取中的物件的最大數目,允許物件處於快取中的最長時間,以及允許物件處於快取中的最長空閒時間
物理儲存介質
記憶體
記憶體和硬碟。物件的散裝資料首先存放在基於內在的快取中,當記憶體中物件的數目達到資料過期策略中指定上限時,就會把其餘的物件寫入基於硬碟的快取中。
快取的軟體實現
在Hibernate的Session的實現中包含了快取的實現
由第三方提供,Hibernate僅提供了快取介面卡(CacheProvider)。用於把特定的快取外掛整合到Hibernate中。
啟用快取的方式
只要應用程式通過Session介面來執行儲存、更新、刪除、載入和查詢資料庫資料的操作,Hibernate就會啟用第一級快取,把資料庫中的資料以物件的形式拷貝到快取中,對於批量更新和批量刪除操作,如果不希望啟用第一級快取,可以繞過Hibernate API,直接通過JDBC API來執行指操作。
使用者可以在單個類或類的單個集合的粒度上配置第二級快取。如果類的例項被經常讀但很少被修改,就可以考慮使用第二級快取。只有為某個類或集合配置了第二級快取,Hibernate在執行時才會把它的例項加入到第二級快取中。
使用者管理快取的方式
第一級快取的物理介質為記憶體,由於記憶體容量有限,必須通過恰當的檢索策略和檢索方式來限制載入物件的數目。Session的evit()方法可以顯式清空快取中特定物件,但這種方法不值得推薦。
第二級快取的物理介質可以是記憶體和硬碟,因此第二級快取可以存放大量的資料,資料過期策略的maxElementsInMemory屬性值可以控制記憶體中的物件數目。管理第二級快取主要包括兩個方面:選擇需要使用第二級快取的持久類,設定合適的併發訪問策略:選擇快取介面卡,設定合適的資料過期策略。

相關文章