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

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

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

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

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

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

    悬赏问题

    • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
    • ¥15 关于arduino编程toCharArray()函数的使用
    • ¥100 vc++混合CEF采用CLR方式编译报错
    • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
    • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
    • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
    • ¥50 如何openEuler 22.03上安装配置drbd
    • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
    • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
    • ¥15 Windows11, backspace, enter, space键失灵