top啦它 2022-04-18 16:02 采纳率: 73.7%
浏览 38
已结题

今天在看Mybatis的视频时,看到了一个弹幕,不知道我的理解对不对。

问:
暂存区已经清空了,那为啥还可以通过暂存区找到相应的二级缓存?就算返回一个空值,通过delegate链式反应下去不是还能通过一级缓存或者底层的数据库进行查询?那还如何保证数据的一致性原则?

答:
在进行select操作时,经过cache链获取到了数据,在将要返回时,发现clearOnCommit已经被标记为true,那么会返回null,在CachingExecutor中有一个判断,如果在二级缓存中没有找到数据,就会进入BaseExecutor查询一级缓存,而一级缓存是会话级别的,在select时具有可重复读的特性(如果想要读已提交可以缩小一级缓存的控制域),但是在执行当前读操作时便会清空一级缓存,如果没有找到数据就会访问数据库。这恰恰是为了保证数据的一致性。

  • 写回答

0条回答 默认 最新

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 已结题 4月24日
      • 创建了问题 4月18日

      悬赏问题

      • ¥15 SpringBoot项目启动报错:No active profile set, falling back to default profiles:default,如何解决?
      • ¥15 部署confluence设置数据库这个步骤时,提示必须配置utf8 作为默认字符集
      • ¥15 如何脱离Photoshop实现ps脚本的渲染
      • ¥15 丙类高频放大器匹配网络
      • ¥15 Pytorch框架nn.RNN训练时反向传播报错
      • ¥60 添加:普通链接二维码,的时候,总是提示校验文件检查失败
      • ¥15 react的使用问题
      • ¥150 关于#算法#的问题,如何解决?动态平衡算法实现
      • ¥20 苹果手机开启蓝牙和Wi-Fi 按钮后黑客是否可以入侵该手机?
      • ¥15 关于#hadoop#的问题:1.为什么我这里会显示中午数字2.为什么我会连接失败打不开local host