文章目录
二级缓存
- 二级缓存也叫全局缓存,一级缓存作用域太低,所以诞生了二级缓存
- 基于namespace级别的缓存,一个名字空间对应一个二级缓存
- 工作机制
- 一个会话查询一条数据,这个数据就会被放在当前会话的一级缓存中
- 如果当前会话关闭,一级缓存也就会消失,但是我们想要的是会话关闭时,一级缓存中的数据保存到二级缓存中
- 新的会话查询信息,就可以从二级缓存中获取
- 不同的mapper查询数据会放在自己对应的缓存(map)中
步骤:
-
开启全局缓存
<settings> <!-- 显示开启全局缓存,默认也是true--> <setting name="cacheEnabled" value="true"/> </settings>
-
在要使用二级缓存的Mapper中定义
需要实现序列化<cache/>
也可以
<!-- 在当前Mapper.xml中使用二级缓存--> <cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>
-
测试
-
未开启二级缓存
public class UserMapperTest { @Test public void selectById(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); SqlSession sqlSession1 = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); UserMapper mapper1 = sqlSession1.getMapper(UserMapper.class); User user = mapper.selectById(1); System.out.println(user); sqlSession.close(); System.out.println("=================================================="); User user1 = mapper1.selectById(1); System.out.println(user1); System.out.println(user == user1); sqlSession1.close(); } }
-
-
开启二级缓存
小结:
- 只要开启了二级缓存,在同一个Mapper下都有效
- 所有数据都会先放在一级缓存中
- 当提交数据或者关闭连接时,才会放到二级缓存中
上一节–>一级缓存
如有不对的地方欢迎指出,共同进步!