Mybatis二级缓存
失效策略:执行同个namespace下的mapper映射文件中增删改sql,并执行了commit操作,会清空该二级缓存
注意:实现二级缓存的时候,Mybatis建议返回的的POJO是可序列化的,也就是建议实现Serializable接口
缓存淘汰策略:会使用默认的LRU算法来收回(最近最少使用的)
如何开启某个二级缓存,mapper.xml里面配置
<!--开启mapper的namespace下的二级缓存-->
<!--
eviction:代表的是缓存回收策略,常见下面两种
LRU:最近最少使用的,移除最长时间不用的对象
FIFO:先进先出,按对象进入缓存的顺序来移除他们
flushInterval:刷新间隔时间,单位为毫秒,这里配置的是100秒刷新,如果不配置,当SQL被执行的时候才会去刷新缓存
size:引用数目,代表缓存最多可以存储多少个对象,设置过大会导致内存溢出
readOnly:只读,缓存数据只能读取而不能修改,默认值是false
-->
<cache eviction="LRU" flushInterval="100000" size="1024" readOnly="true"/>
<!--全局配置-->
<settings>
<!--这个配置使全局的映射器(二级缓存)启用或禁用,全局总开关,这里关闭,mapper中开启也没用-->
<setting name="cacheEnabled" value="true"/>
</settings>
如果需要控制全局mapper里面某个方法不使用缓存,可以配置useCache="false"
一级缓存和二级缓存使用顺序
原文:https://www.cnblogs.com/Gen2021/p/14705017.html