mybatis系统中默认定义了两级缓存:一级缓存和二级缓存
一级缓存也叫本地缓存:SqlSession
1.查询不同的东西
2.增删改操作,可能会改变原来的数据,所以必定会刷新缓存
3.查询不同的Mapper.xml
4.手动清除缓存
二级缓存也叫全局缓存,一级缓存的作用域太低,所以诞生了二级缓存
基于namespace级别的缓存,一个名称空间,对应一个二级缓存;
工作机制
<settings>
<!--开启二级缓存 其实默认就是开启的-->
<setting name="cacheEnable" value="true"/>
</settings>
<cache eviction="FIFO"
flushInterval="60000"
size="512"
readOnly="true"/>
eviction(清除策略) 可用的清除策略有:
LRU
– 最近最少使用:移除最长时间不被使用的对象。FIFO
– 先进先出:按对象进入缓存的顺序来移除它们。SOFT
– 软引用:基于垃圾回收器状态和软引用规则移除对象。WEAK
– 弱引用:更积极地基于垃圾收集器状态和弱引用规则移除对象。flushInterval(刷新间隔)属性可以被设置为任意的正整数,设置的值应该是一个以毫秒为单位的合理时间量。 默认情况是不设置,也就是没有刷新间隔,缓存仅仅会在调用语句时刷新。
size(引用数目)属性可以被设置为任意正整数,要注意欲缓存对象的大小和运行环境中可用的内存资源。默认值是 1024。
readOnly(只读)属性可以被设置为 true 或 false。只读的缓存会给所有调用者返回缓存对象的相同实例。 因此这些对象不能被修改。这就提供了可观的性能提升。而可读写的缓存会(通过序列化)返回缓存对象的拷贝。 速度上会慢一些,但是更安全,因此默认值是 false。
原文:https://www.cnblogs.com/licha233/p/12824017.html