Mybatis 缓存配置 ,如何禁用缓存与一些细节

一、一级缓存不做探讨,这里主要作二级缓存配置:

①.在MyBatis中,配置二级缓存首先要在Mybatis-config.xml 配置支持缓存语句:

<settings>
        <!--缓存,默认也是开启-->
        <!--有些二级缓存可能用到序列化技术,所以entity类要Serializable接口-->
        <setting name="cacheEnabled" value="true"/>
</settings>

②.配置完毕之后,找到相对应想要做二级缓存的XXMapper.xml文件,在<mapper></mapper>中进行如下配置:

<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>

配置中参数信息含义如下:

eviction                       :        缓存的回收策略

flushInterval               :        时间间隔(毫秒)

size                              :        引用数目,缓存对象数目和运行环境数目,默认1024

readOnly                     :        是否只读

其中,对于eviction的回收策略,有其四种:

1. LRU - 最近最少使用:移出最长时间不被使用的对象 (默认);

2. FIFO - 先进先出(队列):按对象进入缓存的顺序移除 ;

3. SOFT - 软引用: 移除基于垃圾回收器状态和软引用规则的对象 ;

4. WEAK - 弱引用:更积极移除基于垃圾收集器状态和引用规则的对象 。

二、如何禁用缓存?

1.给mybatis-config.xml添加如下属性时,将全局关闭缓存;

<settings>
        <setting name="cacheEnabled" value="false"/>
</settings>

2.不为不需要进行缓存的Mapper.xml添加<cache/>;

3.给对应SQL语句进行设置局部禁用缓存(userCache) 例:

<select id="getSomeThing" parameterType="Integer" resultType="Integer" useCache="false">
        SELECT * FROM `table`
</select>

注:

①. insert,update,delete语句默认拥有刷新缓存属性 flushCache = "true" ;

②. 缓存执行顺序为: 二级缓存 --> 一级缓存 --> DB ;

③. 二级缓存数据在一级缓存关闭之后才会有,所以不会出现一二级有相同数据情况 ;

④. 在实际项目中,往往使用更专业的第三方缓存产品,例如EhCache 。

---本文仅供个人记载

---2022/09/08