MyBatis缓存(一级、二级)和自定义缓存

本文详细介绍了MyBatis的一级缓存和二级缓存,一级缓存作为本地缓存,自动开启且无法关闭,用于保存会话中的查询结果,而二级缓存则为全局缓存,可在多个SqlSession间共享。一级缓存在数据变化或手动清除时失效,二级缓存可以通过设置cacheEnabled开启,并通过Ehcache进行自定义配置以提高缓存性能。同时,文章还提供了Ehcache的配置和在Mapper中的应用步骤。
摘要由CSDN通过智能技术生成

缓存介绍:

就是将用户经常查询的数据的结果的一个保存,保存到一个内存中,用户在查询的时候就不用到数据库文件中查询,从而减少与数据库的交付次数提高了响应速度,解决了并发系统的性能问题。

MyBatis提供了一级缓存和二级缓存:

  • 一级缓存:

也称为本地缓存,用于保存用户在一次会话过程中查询的结果,用户一次会话中只能使用一个sqlSession,一级缓存是自动开启的,不允许关闭。如果执行多次查询条件完全相同的SQL,会优先命中一级缓存,避免直接对数据库中直接查询。

 一级缓存失效的原因:

  1. 当查询的结果不一样时会失效
  2. 执行增删改的时候,数据发生变化,就要刷新缓存,也会失效
  3. 手动设置sqlSession.clearCache()也同样会失效
  • 二级缓存:

也称为全局缓存,是mapper级别的缓存,是针对一个表的查结果的存储,可以共享给所有针对这张表的查询的用户。也就是说对于mapper级别的缓存不同的sqlsession是可以共享的。开启二级缓存后,如果一级缓存的SqlSession关闭,那么一级缓存就没有了,一级缓存中的数据就会存入二级缓存中

怎么开启二级缓存:

  1. 在Mybaties的配置文件中添加settings标签,属性写cacheEnabled,cacheEnabled的默认值是true
<settings>
    <setting name="cacheEnabled" value="true"/>
</settings>

     2.然后在对应的Mapper下面添加<cache/>标签

     3.cache标签的一些属性(可以不用写):

eviction: 定义回收的策略,常见的有FIFO,LRU。

flushInterval: 配置一定时间自动刷新缓存,单位是毫秒。

size: 最多缓存对象的个数。

readOnly: 是否只读,若配置可读写,则需要对应的实体类能够序列化。

自定义缓存之Ehcacheh的使用:

  • 1.导入ehcache的Jar
<dependency>
        <groupId>net.sf.ehcache</groupId>
        <artifactId>ehcache</artifactId>
        <version>2.10.4</version>
</dependency>
  • 2.百度找一个ehcache的配置文件:
<?xml version="1.0" encoding="UTF-8"?>
 
<ehcache>
 
    <diskStore path="java.io.tmpdir"/>
 
    <defaultCache
            maxEntriesLocalHeap="1000"
            eternal="false"
            timeToIdleSeconds="1200"
            timeToLiveSeconds="3000"
            diskSpoolBufferSizeMB="30"
            maxEntriesLocalDisk="10000"
            diskExpiryThreadIntervalSeconds="1200"
            memoryStoreEvictionPolicy="LRU"
            statistics="false">
        <persistence strategy="localTempSwap"/>
    </defaultCache>
 
    <cache name="harryBootCache"
           eternal="false"
           timeToIdleSeconds="1200"
           timeToLiveSeconds="3000"
           maxElementsInMemory="1000"
           memoryStoreEvictionPolicy="FIFO"/>
 
</ehcache>
  • 3.在对应的Mapper下面设置ehcache的实现
<cache type="net.sf.ehcache.Ehcache"/>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值