什么是缓存?
数据交换的缓冲区,当应用程序需要读取数据时,先从数据库中将数据取出,放置在缓冲
区中,应用程序从缓冲区读取数据。
什么是一级缓存?
相对同一个 SqlSession 对象而言的缓存。
当调用sqlsession的修改,添加,删除,commit(),close() 等方法时,就会清空一级缓存。
一级缓存的工作流程
1 对于某个 Select Statement,根 据该 Statement 生成 key
2 判断在Local Cache中,该key是否用对应的数据存在;
3 如果命中,则跳过查询数据库,继续往下走;
4 如果没命中,去数据库中查询数据,得到查询结果
5 将key和查询到的结果作为key和value,放入Local Cache 中;
6 将查询结果返回
7 判断缓存级别是否为 STATEMENT级别,如果是的话,清空本地缓存;
一级缓存失效情况
1 不同sqlSession对应不同的一级缓存
2同一个sqlSession单查询条件不同
3同一个sqlSession俩次查询期间执行了任何一次增删操作
4同一个sqlSession俩次查询期间手动清空了缓存
什么是二级缓存?
一个 namespace 下的所有操作语句,都影响着同一个Cache
;
二级缓存的优缺点
Mybatis 的二级缓存相对于一级缓存来说, 实现了缓存数据
极大可能会出现错误数据,有设计上的缺陷, 安全使用的条件比较苛刻
分布式环境下,必然会出现读取到错误 数据,所以不推荐使用。