缓存与DB一致性问题

造成这个问题的原因

首先这两个操作不是原子性的,在多线程环境下,当线程A从数据库中读到的数据是1,在往缓存里面更新缓存之前,线程B操作了这条数据更新成为2。并发带来的原子性问题就是出现这个问题的根本原因。

解决方案

  1. 强一致性
    • 延时双删:删除数据、更新redis的时候,等待其他线程把缓存更新好。可能出现新的问题就是不知道等待多久、不知道其他线程是否处理完毕。还需要他在代码里面写一些延时方案。
  2. 锁:把这两个操作变成原子性。性能就会有影响,违背用缓存的初衷。

如果真的有强一致性要求,就不用缓存。

最终一致性
  1. 缓存加过期时间

  2. 利用中间件
    canal
    canal

    消息中间件的可靠通信

posted @   fchhk  阅读(48)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示