外观
一句话答案
先删缓存→更新 DB→延迟 N 毫秒→再删缓存,解决主从延迟导致的不一致,更推荐 Canal 监听 binlog 异步删除。
核心要点
流程:
- 删除 Redis 缓存
- 更新数据库
- 延迟 N 毫秒(大于主从同步+一次读耗时)
- 再次删除 Redis 缓存
延迟时间评估: 主从延迟 + 一次业务读取耗时 + 冗余(通常几百ms到1s)
更推荐: Canal 监听 binlog 异步删除缓存(无需估算延迟)
追问与易错
追问方向:
- 延迟时间太短/太长分别什么问题?
- 还是可能不一致?什么时候用 Canal?
- 第二次删除失败怎么办?
易错点:
- ❌ 延迟双删保证强一致——只减少不一致窗口
- ❌ 延迟时间随便设——需大于主从延迟+读取时间
💡 记忆锚点
延迟双删 = 擦黑板擦两遍:先擦一遍(删缓存),写新内容(更新DB),等同学们抄完旧板书(主从同步+读延迟),再擦一遍(二次删缓存)。嫌估时间麻烦就用Canal监听binlog自动擦。