1.前言
這篇部落格再前幾篇部落格的基礎上來解說一下。hibernate中的二級快取。二級快取是屬於sessionfactory級別的快取機制。2.hibernate二級快取第一級別的快取是session級別的快取,是屬於事務範圍的快取,由hibernate管理,一般無需進行干預。第二級別的快取是sessionfactory級別的快取。是屬於程序範圍的快取。
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出現系統不可控的時刻。...