在上篇文章中我們對快取以及
hibernate
的一級快取進行了介紹
,接下來的主要內容將是
hibernate
的二級快取
.二級快取也稱為程序級的快取或
sessionfactory
級的快取,二級快取可以被所有的
session共享,
換句話說就是一級快取可以用二級快取裡的內容
.二級快取的生命週期和
sessionfactory
(重量級
,乙個資料庫乙個
sessionfactory)
的生命週期一致,
sessionfactory
可以管理二級快取
.二級快取在
hibernate
中有自己的實現叫做
hashtable
,但是不建議用它進行商用
,可以用來進行測試
.hibernate
的二級快取有專門的快取策略提供商
(cache providers),
例如ehcache
,oscache等.
在這篇文章中我們主要介紹一下
hibernate
二級快取
ehcache
的用法.
二級快取
ehcache
的配置和使用.*
將ehcache.xml
檔案拷貝到
src下(在
hibernate3\etc
\ehcache.xml
路進行.
從hibernate
相關的例子中找配置檔案
)如下圖
預設配置.
maxelementsinmemory="10000"
eternal="false"
timetoidleseconds="120"
timetoliveseconds="120"
overflowtodisk="true"
/>
配置的解釋如下:
可以進行單獨配置
maxelementsinmemory="1000"
eternal="true"
timetoidleseconds="0"
timetoliveseconds="0"
overflowtodisk="false"
/>
*在hibernate.cfg.xml
檔案中加入快取產品提供商
org.hibernate.cache.ehcacheprovider
* 啟用二級快取,這也是它的預設配置,在
hibernate
.cfg.xml
配置檔案中進行啟動二級快取配置
.true
*指定哪些實體類使用二級快取
可以在對映檔案中採用標籤指定或在hibernate.cfg.xml檔案中統一指定
注意使用的策略,通常採用read-only和read-write
.例如在配置檔案中統一進行配置
.(此處筆者將對
student
類進行配置)
*以上便完成了
ehcache
的基本配置
,接下來便是在具體的**中運用
例如在兩個
session
中發load查詢,
因為我們配置了二級快取
,所以在第二次
load
的過程中不在發出查詢語句
,而是直接從二級快取中獲取資料
.測試**如下
:
/**
* 二級快取測試**
* */
public class cachetest extends testcase catch(exception e) finally
try catch(exception e) finally
} }
以上便是
hibernate
二級快取
的ehcache
產品的使用方式
.當然二級快取有著自己適用的場景.
適合存放到第二級快取中的資料?
1很少被修改的資料
2不是很重要的資料,允許出現偶爾併發的資料
3不會被併發訪問的資料
4參考資料,指的是**用參考的常量資料,它的例項數目有限,它的例項會被許多其他類的例項引用,例項極少或者從來不會被修改。
不適合存放到第二級快取的資料?
1經常被修改的資料
2財務資料,絕對不允許出現併發
3與其他應用共享的資料。
總結快取是為效能而生
,但不要想當然的以為快取一定能提高效能,僅僅在你能夠駕馭它並且條件合適的情況下才是這樣的。
hibernate
的二級快取限制還是比較多的,在不了解原理的情況下亂用,可能會有n+1
的問題。不當的使用還可能導致讀出髒資料。
hibernate二級快取
cacheconcurrencystrategy.none cacheconcurrencystrategy.read only 唯讀模式,在此模式下,如果對資料進行更新操作,會有異常 cacheconcurrencystrategy.read write 讀寫模式在更新快取的時候會把快取裡面的資料...
hibernate 二級快取
session快取 一級快取 sql查詢結果快取,由hibernate管理 sessionfactory內建快取,內建快取是hibernate自帶的,用於存放預定義的sql以及hbm.xml描述的元資料,不可解除安裝 sessionfactory外接快取 二級快取 由外部外掛程式提供,外接快取的資料...
Hibernate二級快取
hibernate的session在事務級別進行持久化資料的快取操作。當然,也有可能分別為每個類 或集合 配置集群 或jvm級別 sessionfactory級別 的快取。你甚至可以為之插入乙個集群的快取。注意,快取永遠不知道其他應用程式對持久化倉庫 資料庫 可能進行的修改 即使可以將快取資料設定為...