Mybatis缓存的原理是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
创新互联公司主要从事成都网站建设、成都网站设计、网页设计、企业做网站、公司建网站等业务。立足成都服务临川,十载网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108
1、什么是缓存[Cache]
- 存在内存中的临时数据。 
- 将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。 
2、为什么要使用缓存
减少和数据库的交互次数,减少系统开销,提高系统效率。
3、什么样的数据需要使用缓存
经常查询且不易改变的数据
4、Mybatis缓存
- MyBatis包含一个非常强大的查询缓存特性,它可以非常方便地定制和配置缓存。缓存可以极大的提升查询效率。 
- MyBatis系统中默认定义了两级缓存:一级缓存和二级缓存 
- 默认情况下,只有一级缓存开启。(SqlSession级别的缓存,也称为本地缓存) 
- 二级缓存需要手动开启和配置,他是基于namespace级别的缓存。 
- 为了提高扩展性,MyBatis定义了缓存接口Cache。我们可以通过实现Cache接口来自定义二级缓存 
5、一级缓存
一级缓存也叫本地缓存:
- 与数据库同一次会话期间查询到的数据会放在本地缓存中。 
- 以后如果需要获取相同的数据,直接从缓存中拿,没必须再去查询数据库; 
6、一级缓存失效的四种情况
- sqlSession不同 
- sqlSession相同,查询条件不同 
- sqlSession相同,两次查询之间执行了增删改操作! 
- sqlSession相同,手动清除一级缓存 
@Test
public void testQueryUserById(){
  SqlSession session = MybatisUtils.getSession();
  UserMapper mapper = session.getMapper(UserMapper.class);
  User user = mapper.queryUserById(1);
  System.out.println(user);
  session.clearCache();//手动清除缓存
  User user2 = mapper.queryUserById(1);
  System.out.println(user2);
  System.out.println(user==user2);
  session.close();
}所以说,一级缓存就是一个map
7、二级缓存
- 二级缓存也叫全局缓存,一级缓存作用域太低了,所以诞生了二级缓存 
- 基于namespace级别的缓存,一个名称空间,对应一个二级缓存; 
- 工作机制 
- 一个会话查询一条数据,这个数据就会被放在当前会话的一级缓存中; 
- 如果当前会话关闭了,这个会话对应的一级缓存就没了;但是我们想要的是,会话关闭了,一级缓存中的数据被保存到二级缓存中; 
- 新的会话查询信息,就可以从二级缓存中获取内容; 
- 不同的mapper查出的数据会放在自己对应的缓存(map)中; 
使用步骤:
核心配置文件
去每个mapper.xml中配置使用二级缓存,这个配置非常简单;
方式一:
方式二:
这个更高级的配置创建了一个 FIFO 缓存,每隔 60 秒刷新,最多可以存储结果对象或列表的 512 个引用,而且返回的对象被认为是只读的,因此对它们进行修改可能会在不同线程中的调用者产生冲突。
8、结论
只要开启了二级缓存,我们在同一个Mapper中的查询,可以在二级缓存中拿到数据
查出的数据都会被默认先放在一级缓存中
只有会话提交或者关闭以后,一级缓存中的数据才会转到二级缓存中
原理图:

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。
网站题目:Mybatis缓存的原理是什么
当前网址:http://www.scyingshan.cn/article/jcpood.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 