二級緩存:
定義:
1.二級緩存被稱為進程級緩存或者sessionFactory級緩存,二級緩存可以被所有session共享
2.二級緩存的生命周期和sessionFactory生命周期一樣(sessionFactory生命周期需要在配置中設定),sessionFactory可以管理二級緩存
3.二級緩存的數據是一級緩存放入的,也就是說二級緩存與一級緩存雷同,也是存放的實體類對象,對普通屬性不執行緩存策略,不同的是生命周期的不同,二級緩存可以共享
二級緩存需要配置才能夠生效:
1.引入第三方包ehcache
2.在hibernate.cfg配置:
我們需要配置三個地方: 一個是驅動提供,二個是 開啟二級緩存,三個是配置需要緩存的實體類
1 <!-- 二級緩存驅動提供 --> 2 <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property> 3 <!-- 二級緩存 --> 4 <property name="hibernate.cache.use_second_level_cache">true</property> 5 6 <!-- 緩存配置 --> 7 <class-cache usage="read-only" class="entity.Grade"/> 8 <!--與grade關聯的對象 --> 9 <class-cache usage="read-only" class="entity.Student"/> 10 <collection-cache usage="read-only" collection="entity.Grade.stu"/>
注意:
1.由于hibernate.cache.use_second_level_cache默認是開啟的,我們也可以省略不寫
2.常用緩存策略:read-only / read-write
3.緩存原則:讀遠大于寫的時候使用緩存
二級緩存在配置中開啟時:
當業務不需要使用二級緩存時:
HibernateUtils.getSessionFactory.evict(實體對象.class);
or
HibernateUtils.getSessionFactory.evict(實體對象.class,1);//指定具體
當我們不希望查詢結果保存到二級緩存中:
session.setCacheMode(CacheMode.IGNRE);//可以取消一級緩存和二級緩存之間的交互,這樣可以達到當前sesison不能狗向二級緩存中保存數據
補充:
昨天筆記中提到大數據緩存處理,當我們開啟二級緩存時,session.flush() session.clear()只能清除session級緩存,那么sessionFactory級/二級緩存怎么處理:
這里我在視頻中學習到一種方法:
在save 或這查詢前 取消一級緩存和二級緩存之間的交互,達到目的
文章列表