Redis 和 MySQL 双写一致性¶
一、问题¶
更新数据库,缓存也要更新,否则不一致。
二、方案¶
1. 先更新 DB,再删缓存¶
最常用。
为什么删而不是更新缓存: - 更新缓存可能并发覆盖。 - 懒加载,下次查询才重建。
2. 延迟双删¶
解决并发读旧数据写回缓存。
3. Canal + MQ¶
监听 binlog,异步删缓存。
三、其他方案问题¶
先删缓存再更新 DB¶
读请求刚好在删缓存后、更新 DB 前读,会把旧数据写回缓存。
更新缓存¶
并发更新,顺序不对,缓存数据错。
四、为什么用延迟双删¶
- 简单。
- 大多数场景够用。
五、最终一致¶
强一致做不到,最终一致就行。
一句话
先更新 DB 再删缓存,延迟双删防并发。