Mybatis源码学习三二级缓存

导读:本篇文章讲解 Mybatis源码学习三二级缓存,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

数据查询的流程

 

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才是提交到缓存区

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/1267.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!