数据查询的流程
二级缓存架构图
二级缓存流程图
二级缓存中的重要概念:事务缓存管理器
事务缓存管理器就是一个Map,以二级缓存为key,TransactionalCache为value。 TransactionalCache即包含了暂存区,表示了事务缓存管理器中可以有多个暂存区。
源码分析二级缓存
key的组成:与一级缓存基本一致
update方法
主要就两步,一步清空暂存区(update方法默认会进入此方法),一步交给其他的执行器执行sql
clearOnCommt=true:标记数据已被修改,由于没有真正的删除缓存区,防止其他会话读缓存,读到脏数据。
entriesToAddOnCommit.clear():清除暂存区,其实就是一个Map。
commit方法
分为两步:一步交给其他执行器执行提交操作,一步是更新缓存。
先清空缓存,在填充缓存
遍历暂存区的数据,填充到缓存区
query方法
主要有4步:
1、清楚暂存区,与update一致。query方法默认是不会走此方法的
2、从缓存中获取数据
3、交给其他执行器执行查询sql
4、将数据提交到暂存区
第2步:
从缓存获取数据,如果数据为null,也存储起来,防止缓存穿透
第4步:
将数据提交到暂存区。并不是提交到缓存区,只有commit才是提交到缓存区
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/1267.html