缓存与DB一致性问题
造成这个问题的原因
首先这两个操作不是原子性的,在多线程环境下,当线程A从数据库中读到的数据是1,在往缓存里面更新缓存之前,线程B操作了这条数据更新成为2。并发带来的原子性问题就是出现这个问题的根本原因。
解决方案
- 强一致性
- 延时双删:删除数据、更新redis的时候,等待其他线程把缓存更新好。可能出现新的问题就是不知道等待多久、不知道其他线程是否处理完毕。还需要他在代码里面写一些延时方案。
- 锁:把这两个操作变成原子性。性能就会有影响,违背用缓存的初衷。
如果真的有强一致性要求,就不用缓存。
最终一致性
-
缓存加过期时间
-
利用中间件
canal
消息中间件的可靠通信
偶做前堂客
祝你天天开心
在未知的时间
在未知的地点
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了