mybatis——一级缓存、二级缓存(七)

使用mybatis自带的二级缓存

  1. 同一个sqlSession会共享一级缓存
  2. 二级缓存 同一个namespace产生的xxxMapper对象 默认是关闭状态的 实际存放在硬盘中
  3. 序列化 内存->硬盘
  4. 反序列化 硬盘—> 内存
  5. 准备缓存的对象必须实现序列化接口(如果开启的缓存),将可知对象进行序列化。实现Serializable接口(序列化一个类需要将他的级联属性和父类也要进行序列化)
  6. 当执行close的时候会将一级的缓存对象放到二级缓存对象中去
  7. 禁用:select标签中useCache="false"
  8. 命中率为:查询到的次数/总次数
  9. 清理缓存:commit(执行增删改,设计的原因是为了防止脏数据)  或者 添加属性 flushCaChe="true"

使用第三方二级缓存

以 实现EhcacheCache为例子

配置xml文件 方法:

  1. <?xml version="1.0" encoding="UTF-8"?>
    <ehcache>
        <!-- 当超过内存限的时候(缓存对象的个数>maxElementsInMemory)、指定路径放二级缓存 -->
        <diskStore path="D:\Ehcache"/>
        <!-- 设定缓存的默认数据过期策略 -->
        <!--
        maxElementsInMemory在内存缓存的个数
        maxEntriesLocalDisk在硬盘中放的最大个数
        eternal:设置缓存永远会不会过期
        overflowToDisk:当内存缓存的对象个数满了是不是往硬盘中转移
        timeToIdleSeconds:当两次访问 超过该值的时候就会将缓存对象失效
        timeToLiveSeconds:一个缓存对象最多的存放时间
        diskExpiryThreadIntervalSeconds:设置每隔一段时间清理硬盘的缓存
        memoryStoreEvictionPolicy:当超过缓存对象的最大值的时候进行处理的策略 LRU处理掉最后一个 FIFO先进先出 LFU最不常使用的删了。
        -->
        <defaultCache
                maxElementsInMemory="10000"
                eternal="false"
                overflowToDisk="true"
                timeToIdleSeconds="10"
                timeToLiveSeconds="20"
                diskPersistent="false"
                diskSpoolBufferSizeMB="30"
                maxEntriesLocalDisk="10000000"
                diskExpiryThreadIntervalSeconds="120"
                memoryStoreEvictionPolicy="LRU">
        </defaultCache>
    
    </ehcache>
    
  2. 在mapper的xml文件中声明接口

 <!--实现EhcacheCache的接口-->
    <cache type="org.mybatis.caches.ehcache.EhcacheCache">
        <!--覆盖xml中配置的值-->
        <property name="maxElementsInMemory" value="10000" />
    </cache>

猜你喜欢

转载自blog.csdn.net/qq_40632760/article/details/88246920
今日推荐