题目12:MySQL 与 Redis 双写一致性
📊 评分:— | 📅 完成时间:待完成
📝 题目
如何保证缓存和数据库的双写一致性?为什么一般建议“先更新数据库,再删除缓存”?如果删除缓存失败怎么办?
💬 我的回答
📖 参考答案
一、为什么会有双写一致性问题
缓存和数据库是两个独立系统,更新过程不是原子操作,所以可能出现短暂不一致。
二、常见策略
1. 先删缓存,再更新数据库
- 容易出现并发脏读
- 一般不推荐
2. 先更新数据库,再删缓存
- 工程上最常见
- 即使短时间不一致,也能在下次查询后恢复
三、删除缓存失败怎么办
- 重试删除
- 记录消息异步补偿
- 用 Canal 监听 binlog 再删缓存
四、面试追问
- 延迟双删适合什么场景
- 读写并发时脏数据怎么出现
- 强一致是否值得追求
🎯 面试标准话术
"缓存和数据库双写很难做到绝对强一致,工程上一般采用最终一致性方案。最常用的是先更新数据库,再删除缓存;如果删除失败,再通过重试或异步补偿兜底。"