一级缓存 (session级别)
1.同一个session;
2.默认开启
一级缓存失效的四种情况:
1、sqlsession不同
2、sqlsession相同,查询缓存中没有的数据
3、sqlsession相同,但两次查询之间执行了增删改操作
4、sqlsession相同,但手动清楚了一级缓存(缓存清空)
清空缓存:openSession.clearCache();
二级缓存 (sessionFactory级别)
1.同一个sessionFactory (同一个映射文件)
2.默认关闭,需要手动开启
3.实体类要实现序列化
手动开启步骤:
二级缓存配置:
eviction:缓存的回收策略:
• LRU – 最近最少使用的:移除最长时间不被使用的对象。
• FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
• SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。
• WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。
• 默认的是 LRU。
flushInterval:缓存刷新间隔
缓存多长时间清空一次,默认不清空,设置一个毫秒值
readOnly:是否只读:
true:只读;mybatis认为所有从缓存中获取数据的操作都是只读操作,不会修改数据。
mybatis为了加快获取速度,直接就会将数据在缓存中的引用交给用户。不安全,速度快
false:非只读:mybatis觉得获取的数据可能会被修改。
mybatis会利用序列化&反序列的技术克隆一份新的数据给你。安全,速度慢
size:缓存存放多少元素;
type="":指定自定义缓存的全类名;