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

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

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

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

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

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

    悬赏问题

    • ¥15 为什么eprime输出的数据会有缺失?
    • ¥20 腾讯企业邮箱邮件可以恢复么
    • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
    • ¥15 错误 LNK2001 无法解析的外部符号
    • ¥50 安装pyaudiokits失败
    • ¥15 计组这些题应该咋做呀
    • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
    • ¥15 让node服务器有自动加载文件的功能
    • ¥15 jmeter脚本回放有的是对的有的是错的
    • ¥15 r语言蛋白组学相关问题