zoukankan      html  css  js  c++  java
  • Hibernate <二级缓存>

    二级缓存:

      定义:

          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 或这查询前  取消一级缓存和二级缓存之间的交互,达到目的  

        

          

  • 相关阅读:
    Java学习
    机器学习
    机器学习
    Java 学习
    哈希表复习
    [转] 数据库设计步骤
    Java
    c++的函数重载-笔记
    进程与线程-笔记
    内存知识-笔记
  • 原文地址:https://www.cnblogs.com/gcs1995/p/4155497.html
Copyright © 2011-2022 走看看