具體解釋Hibernate中的二級快取

2021-09-08 04:42:03 字數 3301 閱讀 1822

1.前言

這篇部落格再前幾篇部落格的基礎上來解說一下。hibernate中的二級快取。二級快取是屬於sessionfactory級別的快取機制。

第一級別的快取是session級別的快取,是屬於事務範圍的快取,由hibernate管理,一般無需進行干預。第二級別的快取是sessionfactory級別的快取。是屬於程序範圍的快取。

2.hibernate二級快取

1.分類二級快取也分為了兩種

內建快取:hibernate自帶的,不可解除安裝,通常在hibernate的初始化階段,hibernate會把對映元資料和提前定義的sql語句放置到sessionfactory的快取中。該內建快取是僅僅讀的。

外接快取:通常說的二級快取也就是外接快取,在預設情況下sessionfactory不會啟用這個快取外掛程式,外接快取中的資料是資料庫資料的複製,外接快取的物理介質能夠是記憶體或者硬碟。

hibernate二級快取的結構

2.併發訪問策略

transactional

(事務型)

僅在受管理的環境中適用

提供repeatable read事務隔離級別

適用常常被讀。非常少改動的資料

能夠防止髒讀和不可反覆讀的併發問題

快取支援事務,發生異常的時候。快取也可以回滾

read-write

(讀寫型)

提供read committed事務隔離級別

在非集群的環境中適用

適用常常被讀,非常少改動的資料

能夠防止髒讀

更新快取的時候會鎖定快取中的資料

nonstrict-read-write

(非嚴格讀寫型)

適用極少被改動,偶爾同意髒讀的資料(兩個事務同一時候改動資料的情況非常少見)

不保證快取和資料庫中資料的一致性

為快取資料設定非常短的過期時間,從而盡量避免髒讀

不鎖定快取中的資料

read-only

(僅僅讀型)

適用從來不會被改動的資料(如參考資料)

在此模式下,假設對資料進行更新操作,會有異常

事務隔離級別低,併發效能高

在集群環境中也能完美運作

分析:通過上述**分析例如以下

適合放入二級快取中資料

非常少被改動

不是非常重要的資料。同意出現偶爾的併發問題

不適合放入二級快取中的資料

常常被改動

財務資料,絕對不同意出現併發問題

與其它應用資料共享的資料

3.二級快取的配置

1.hibernate支援的快取外掛程式•ehcache: 可作為程序範圍內的快取,存放資料的物理介質能夠是記憶體或硬碟,對hibernate的查詢快取提供了支援•opensymphony`:可作為程序範圍內的快取,存放資料的物理介質能夠是記憶體或硬碟,提供了豐富的快取資料過期策略,對hibernate的查詢快取提供了支援

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

•jbosscache:可作為集群範圍內的快取,支援hibernate的查詢快取

四種快取外掛程式支援的併發範圍策略例如以下圖

2.二級快取配置

以下以ehcache快取為例,來講一下二級快取的配置

2.1 拷貝jar包如要第三方的jar包ehcache-1.5.0.jar,而且依賴於

依賴backport-util-concurrent 和 commons-logging

2.2 在hibernate.cfg.xml中開啟二級快取

true

2.3 配置二級快取技術提供商

org.hibernate.cache.ehcacheprovider

2.4 配置快取資料物件併發策略

方式一 在hbm檔案裡配置

方式二 在cfg檔案配置(集中配置)

2.5 加入二級快取配置檔案在src中配置ehcache.xml,將ehcache.jar包中的ehcache-failsafe.xml 改名 ehcache.xml 放入 src 

配置二級快取硬碟暫時資料夾位置 

4.demo測試二級快取

@test

public void fun1()

linux diff具體解釋

diff是unix系統的乙個非常重要的工具程式。它用來比較兩個文字檔案的差異,是 版本號管理的基石之中的乙個。你在命令列下,輸入 diff 變動前的檔案 變動後的檔案 diff就會告訴你,這兩個檔案有何差異。它的顯示結果不太好懂,以下我就來說明,怎樣讀懂diff。一 diff的三種格式 因為歷史原因...

linux select具體解釋

linux select 具體解釋 select 系統呼叫時用來讓我們的程式監視多個檔案控制代碼的狀態變化的。程式會停在 select 這裡等待,直到被監視的檔案控制代碼有乙個或多個發生了狀態改變。關於檔案控制代碼,事實上就是乙個整數,通過 socket 函式的宣告就明確了 int socket i...

具體解釋kernel中watchdog 驅動程式

watchdog不管在小系統還是大的project系統中都是必須存在的。在解決執行緒掛死 系統死迴圈等都用非常重要的應用,算是系統出問題恢復初始狀態的救命稻草。在kernel中wdt的應用不是非經常見,原因就是相比於裸系統來講。它的執行緒會出現一些非同步的情況,執行狀態easy出現系統不可控的時刻。...