文章出處

二級緩存:

  定義:

      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 或這查詢前  取消一級緩存和二級緩存之間的交互,達到目的  

    

      

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()