概述:
- 全局缓存包括一级缓存,二级缓存。一级缓存作用域太低,所有就需要二级缓存。
- namespace级别的缓存,一个名称空间对应一个二级缓存。
工作原理
:
(1)一个会话查询一条数据,这个数据就会被放在一级缓存里。
(2)如果会话关闭了,一级缓存就会失效,会话关闭了,一级缓存就会放在二级缓存中。
(3)新的会话查询时就会从二局缓存中查询。
(4)不同的mapper查处的数据会放在自己对应的缓存中(map
)。
使用方法:
<setting name="cacheEnabled" value="true">
<cache eviction="FIFO"
<!--60秒后自动失效-->
flushInterval="60000"
size="512"
readOnly="true"
/>
@org.junit.Test
public void test1(){
SqlSession sqlSession=MyBatisUtils.getSqlSession();
SqlSession sqlSession2=MyBatisUtils.getSqlSession();
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
User user1=userMapper.queryUserById(1);
System.out.println(user1);
sqlSession.close();
UserMapper userMapper2=sqlSession2.getMapper(UserMapper.class);
User user2=userMapper2.queryUserById(1);
System.out.println(user2);
sqlSession2.close();
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/610b14364202fe496050a32a470bcdf3.png)
缓存原理图:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ce24a3ffedbb415c5eb35ac716a868f4.png)