一级缓存

2020-12-12  本文已影响0人  无限骄傲

一级缓存的机制

首先,一级缓存是sqlSession级别的,也就是在一个sqlSession中如果进行了多次重复的sql查询操作,实际上除了第一次后面都是从缓存中获取的(这里只讲解一级缓存 默认二级缓存关闭).当然如果我们对数据进行了增删改操作以及事务提交关闭就会刷新缓存,一级缓存的数据结构是一个hashMap.下面演示一下效果

无更新操作 结果 新增更新操作 结果展示

我们可以看出三点:

1) 连续两次查询同一数据第一次会去数据库中查询,后面会直接从缓存中取值.

2)从缓存中取值的对象是同一个对象

3)进行更新操作后 会刷新缓存 从数据库从新取值

一级缓存流程

源码分析

首先我们带着问题进行分析

一级缓存到底是什么?一级缓存什么时候被创建、一级缓存的工作流程是怎样的?

查询流程剖析

mybatis中所有的查询基本都是走Sqlsession.selectList方法 所以我们只需要找其中有关缓存的方法即可

缓存流程

源码分析

首先一级缓存的 数据结构是hashMap证明

我们可以直接从execute.query中查看

execute.query缓存操作 查询后插入一级缓存

从源码中还可以看出当LocalCacheScope属性设置为STATEMENT时候查询也是会清空缓存的

LocalCacheScope配置相关

进行更新操作时候 缓存也会清空

上一篇 下一篇

猜你喜欢

热点阅读