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

        

          

  • 相关阅读:
    cisco 4500X 交换机限速
    HPE 交换机基础配置
    MySQL数据库之主从复制
    MySQL复制线程状态转变
    MySQL数据库备份之mysqldump
    MySQL数据库之慢查询日志
    MySQL数据库之多线程备份工具mydumper
    MySQL数据库之索引
    MySQL之二进制日志
    MySQL数据库之sql_mode解释
  • 原文地址:https://www.cnblogs.com/gcs1995/p/4155497.html
Copyright © 2020-2023  润新知