Skip to content
进阶

一句话答案

先删缓存→更新 DB→延迟 N 毫秒→再删缓存,解决主从延迟导致的不一致,更推荐 Canal 监听 binlog 异步删除。

核心要点

流程:

  1. 删除 Redis 缓存
  2. 更新数据库
  3. 延迟 N 毫秒(大于主从同步+一次读耗时)
  4. 再次删除 Redis 缓存

延迟时间评估: 主从延迟 + 一次业务读取耗时 + 冗余(通常几百ms到1s)

更推荐: Canal 监听 binlog 异步删除缓存(无需估算延迟)

追问与易错

追问方向:

  • 延迟时间太短/太长分别什么问题?
  • 还是可能不一致?什么时候用 Canal?
  • 第二次删除失败怎么办?

易错点:

  • ❌ 延迟双删保证强一致——只减少不一致窗口
  • ❌ 延迟时间随便设——需大于主从延迟+读取时间

💡 记忆锚点

延迟双删 = 擦黑板擦两遍:先擦一遍(删缓存),写新内容(更新DB),等同学们抄完旧板书(主从同步+读延迟),再擦一遍(二次删缓存)。嫌估时间麻烦就用Canal监听binlog自动擦。