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