Mybatis源码学习三二级缓存

数据查询的流程

 

Mybatis源码学习三二级缓存

二级缓存架构

Mybatis源码学习三二级缓存

二级缓存流程图

Mybatis源码学习三二级缓存

二级缓存中的重要概念:事务缓存管理器 

Mybatis源码学习三二级缓存

Mybatis源码学习三二级缓存

Mybatis源码学习三二级缓存

事务缓存管理器就是一个Map,以二级缓存为key,TransactionalCache为value。 TransactionalCache即包含了暂存区,表示了事务缓存管理器中可以有多个暂存区。

源码分析二级缓存

key的组成:与一级缓存基本一致

Mybatis源码学习三二级缓存

update方法

主要就两步,一步清空暂存区(update方法默认会进入此方法),一步交给其他的执行器执行sql

Mybatis源码学习三二级缓存

 Mybatis源码学习三二级缓存

Mybatis源码学习三二级缓存 clearOnCommt=true:标记数据已被修改,由于没有真正的删除缓存区,防止其他会话读缓存,读到脏数据。

entriesToAddOnCommit.clear():清除暂存区,其实就是一个Map。

 

commit方法

分为两步:一步交给其他执行器执行提交操作,一步是更新缓存。

Mybatis源码学习三二级缓存

 Mybatis源码学习三二级缓存

 Mybatis源码学习三二级缓存

 先清空缓存,在填充缓存

Mybatis源码学习三二级缓存

遍历暂存区的数据,填充到缓存区 

query方法

主要有4步:

1、清楚暂存区,与update一致。query方法默认是不会走此方法的

2、从缓存中获取数据

3、交给其他执行器执行查询sql

4、将数据提交到暂存区

Mybatis源码学习三二级缓存

第2步:

Mybatis源码学习三二级缓存

 Mybatis源码学习三二级缓存

 从缓存获取数据,如果数据为null,也存储起来,防止缓存穿透

第4步:

Mybatis源码学习三二级缓存

Mybatis源码学习三二级缓存

 将数据提交到暂存区。并不是提交到缓存区,只有commit才是提交到缓存区

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容