Cache(缓存)引发数据不一致,本质上是因为:同一份数据在“数据源”和“缓存”中存在多份副本,而写操作无法在保证性能的前提下,瞬间、原子地让所有副本都保持一致。
下面从原因分类来讲清楚。
典型架构:
写请求 → DB
读请求 → Cache(可能命中旧数据)
只要:
就可能出现不一致。
典型错误顺序:
1. 更新数据库
2. 删除缓存(失败)
结果:
✅ 即使使用「Cache Aside」模式,第二步失败也会导致不一致。
场景:
线程A:读 cache miss → 读 DB(旧)
线程B:更新 DB → 删 cache
线程A:把旧数据写回 cache
结果:
这是经典并发坑。
即使逻辑正确:
这是可接受的最终一致,但不是强一致。
很多人会:
写 DB
写 Cache
问题:
比“删缓存”更容易出错。
即使 Cache 正确:
写主库
读从库(还没同步)
写缓存
Cache 里也可能是旧数据。
例如:
因为:
CAP 视角:
✅ Cache Aside(推荐)
✅ 延迟双删
删缓存 → 更新DB → 延迟再删
✅ 设置较短 TTL(兜底)
✅ 用 MQ 保证最终一致
✅ 读写走同一数据源(如只读 Cache,不回种)
Cache 引发数据不一致,是因为“缓存是副本”,而“副本永远可能落后于源头”。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。