【MyBatis】缓存机制

来源:互联网 发布:长沙华为网络培训 编辑:程序博客网 时间:2024/05/15 18:12

引言

MyBatis查询缓存分为一级缓存和二级缓存
一级缓存是SQLSession级别的缓存
二级缓存是mapper级别的缓存,二级缓存多个SqlSession共享


架构图

这里写图片描述


一级缓存(SqlSession级别)

当在同一个SqlSession中执行两次相同的SQL语句时,第一次查询到的数据会写入缓存,第二次查询会直接从缓存中直接获取数据
当一个SqlSession结束后,该SqlSession中的一级缓存则消失
当SQLSession进行了DML操作并提交到了数据库,则清空一级缓存

缓存流程:
1.对于某个查询,根据statementId,params,rowBounds来构建一个key值;
2.根据这个key值去缓存Cache中取出对应的key值存储的缓存结果;
3.. 如果返回结果为空,则去数据库查询,得到结果后把key和结果作为KV对存储到Cache中;


二级缓存(mapper级别)

多个SqlSession共用一个mapper,作用域是mapper的同一个namespace
当第二次查询使用相同的sql语句,参数也相同,则会从缓存中获取数据

MyBatis的二级缓存的选择方案
1.MyBatis自身提供的缓存实现;
2. 用户自定义的Cache接口实现;
3.跟第三方内存缓存库的集成;


小结

如果MyBatis使用了二级缓存,Mapper和select语句也配置使用了二级缓存,那么在执行select查询的时候,MyBatis会先从二级缓存中取输入,然后是一级缓存

MyBatis通过缓存机制减轻数据压力,提高数据库性能

原创粉丝点击