Hibernate二級緩存又稱爲“SessionFactory的緩存”
1.Hibernate二級緩存介紹
由於SessionFactory對象的生命週期和應用程序的整個過程對應,因此Hibernate二級緩存是進程範圍或者集羣範圍的緩存,
有可能出現併發問題,因此需要採用適當的併發訪問策略,該策略爲被緩存的數據提供了事務隔離級別。
第二級緩存是可選的,是一個可配置的插件,默認下SessionFactory不會啓用這個插件。
Hibernate提供了org.hibernate.cache.CacheProvider接口,它充當緩存插件與Hibernate之間的適配器。
Hibernate二級緩存在於sessionFactory ,sessionFactory 關閉,二級緩存消失(二級緩存默認開啓)。
2.Hibernate二級緩存原理
Hibernate的二級緩存的實現原理與一級緩存是一樣的,也是通過以ID爲key的Map來實現對對象的緩存。
3.什麼樣的數據適合存放到第二級緩存中?
1) 很少被修改的數據
2) 不是很重要的數據,允許出現偶爾併發的數據
3) 不會被併發訪問的數據
4) 常量數據
4.什麼樣的數據不適合存放到第二級緩存中?
1) 經常被修改的數據
2) 絕對不允許出現併發訪問的數據,如財務數據,絕對不允許出現併發
3) 與其他應用共享的數據
5.二級緩存管理
evict(Class arg0, Serializable arg1)將某個類的指定ID的持久化對象從二級緩存中清除,釋放對象所佔用的資源
sessionFactory.evict(Customer.class, new Integer(1));
evict(Class arg0) 將指定類的所有持久化對象從二級緩存中清除,釋放其佔用的內存資源。
sessionFactory.evict(Customer.class);
evictCollection(String arg0) 將指定類的所有持久化對象的指定集合從二級緩存中清除,釋放其佔用的內存資源。
sessionFactory.evictCollection("Customer.orders");
6.二級緩存的配置,常用的二級緩存插件:
EHCache org.hibernate.cache.EhCacheProvider
OSCache org.hibernate.cache.OSCacheProvider
SwarmCahe org.hibernate.cache.SwarmCacheProvider
JBossCache org.hibernate.cache.TreeCacheProvider
7.二級緩存簡單操作實現
(1)創建Java項目,整個項目如圖:
(2)配置book.hbm.xml與Book(同hibernate一級緩存一樣)
(3)二級緩存是通過<cache>元素來進行配置的,所以在book.hbm.xml裏面配置加入
<cache usage="read-only" />
(4)Hibernate2.cfg.xml裏面需要添加配置
<property name="cache.use_second_level_cache">true</property> <!--true默認開啓 --!>
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
<property name="hibernate.cache.use_query_cache">true</property>
(5)增加EHCache配置參數
(6)測試類Demo2
(7)效果展示 (cache配置後區別,二級緩存開啓時只查詢一條SQL)