一级缓存(应用缓存)
- 默认开启,如果要关闭在select 标签上配置flushCache="true"
- 存在sqlSeesion 生命周期,在同一个sqlSession 中查询时,Mybatis 会把执行的方法和参数通过算法生成缓存的key,将key 和查询结果存入Map对象中,如果同一个sqlSession中执行的方法和参数完全一致,那么通过算法会生成相同的key,当Map 缓存对象中已经存在该key时,会返回缓存中的数据;
- 任何insert update delete 操作都会清空一级缓存;
二级缓存
存在sqlSessionFactory生命周期中,可以理解为跨sqlSession,缓存是以namespace 为单位,不同nameSpace 下的操作互不影响
setting 参数cacheEnabled, 这个参数是二级缓存的全局开关,默认是true, 如果把这个参数这只为false, 即使有后面的二级缓存的配置,也不会生效。
要开启二级缓存,要在sql映射文件中添加配置:
<cache eviction="FIFO" flushInterval="60000" size="512" readOnlu="true"/>
上面的语句的意思是:
下面的所有select 语句都会被缓存;
映射语句中的insert update delete 会刷新缓存
缓存会使用(LRU 最近最少使用)算法回收
根据时间表(如果没有时间缓存不会以任何时间顺序刷新)来刷新
可读或者可写的使用<cacheRef ="其他的命名空间"> 使用同一个二级缓存