Hibernate的快取機制
阿新 • • 發佈:2019-02-02
Hibernate中提供了兩級快取,分別是一級快取和二級快取,第一級別的快取是session級別的快取,它是屬於事務範圍的快取,這一級別的快取由Hibernate管理,一般情況下無需進行干預;第二級別的快取是SessionFactory級別的快取,它是屬於程序範圍或群集範圍的快取,又可以分為內建快取和外接快取,這一級別的快取可以進行配置和更改,並且可以動態載入和解除安裝。
快取的範圍決定了快取的生命週期以及可以被誰訪問。快取的範圍分為以下3類。
1、事務範圍:快取只能被當前事務訪問,每個事務都有獨自的快取,快取內的資料通常採用相互關聯的物件形式。
2、程序範圍:快取被程序內的所有事務共享。這些事務有可能是併發訪問快取,因此必須對快取採取必要的事務隔離機制。程序範圍的快取可能會存放大量的資料,所以存放的介質可以是記憶體或硬碟。快取內的資料既可以是相互關聯的物件形式,也可以是物件的鬆散資料形式。
3、叢集範圍:在叢集範圍中,快取被一臺機器或者多臺機器的程序共享。快取中的資料被複制到叢集環境中的每個程序節點,程序間通過遠端通訊來保證快取中資料的一致性,快取中的資料通常採用物件的鬆散資料形式。
1、存放資料的形式不同:一級快取的資料是相互關聯的持久化物件;二級快取存放的資料是物件的散裝資料。
2、快取的範圍不同:一級快取範圍是事務範圍,二級快取範圍是程序範圍或叢集範圍。
3、併發訪問策略不同:由於每個事務都擁有單獨的一級快取,所以無需提供併發訪問策略;由於二級快取被同一個程序或叢集範圍內的所有事務共享,必須提供適當的併發訪問策略,來保證特定的事務隔離級別。
4、資料過期策略不同:一級快取沒有提供資料過期策略,二級快取必須提供資料過期策略,如基於記憶體的快取中的物件的最大數目、允許物件處於快取中的最長時間以及允許物件處於快取中的最長空間時間等。
5、物理儲存介質不同:一級快取的物理儲存介質是記憶體,二級快取的物理儲存介質是記憶體和硬碟。
6、快取的軟體實現不同:在Hibernate的一級快取通過session來實現快取;Hibernate的二級快取由第三方提供(即SessionFactory),Hibernate僅提供了快取介面卡(CacheProvider),用於把特定的快取外掛整合到Hibernate中。
7、啟用快取的方式不同:當應用程式通過session介面來執行儲存、更新、刪除、載入和查詢資料庫資料的操作時,Hibernate就會啟用一級快取。如果類的例項被經常讀但很少被修改,就可以考慮使用第二級快取。只有為某個類或集合配置了第二級快取,Hibernate執行時才會把它的例項加入到第二級快取中。
8、使用者管理快取的方式不同:一級快取的物理介質為記憶體,由於記憶體容量有限,必須通過恰當的檢索策略和檢索方式來限制載入物件的數目。管理二級快取主要包括兩個方面,一是選擇需要使用的第二級快取的持久類,設定合適的併發訪問策略;二是選擇快取介面卡,設定合適的資料過期策略。
session為應用程式提供了以下兩個管理快取的方法:
1、evict(Object obj):該方法用於從快取中清除引數指定的持久化物件。
2、clear():該方法用於清空快取中所有持久化物件。