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

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

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

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

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 已结题 (查看结题原因) 4月24日
    • 创建了问题 4月18日

    悬赏问题

    • ¥15 逻辑谓词和消解原理的运用
    • ¥15 请求分析基于spring boot+vue的前后端分离的项目
    • ¥15 三菱伺服电机按启动按钮有使能但不动作
    • ¥15 js,页面2返回页面1时定位进入的设备
    • ¥200 关于#c++#的问题,请各位专家解答!网站的邀请码
    • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
    • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
    • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
    • ¥20 腾讯企业邮箱邮件可以恢复么
    • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?