Skip to content
极高困难

一句话答案

Cache Aside 模式:读时先查缓存未命中查 DB 写缓存,写时先更新 DB 再删除缓存,删而非更新避免并发覆盖。

核心要点

Cache Aside Pattern:

  • 读:先读缓存→miss→读DB→写缓存
  • 写:先更新DB→再删除缓存

为什么删而不更新: 更新缓存可能被并发覆盖 / 懒加载(下次读时才建)

强一致: Canal监听binlog异步删除缓存

追问与易错

追问方向:

  • 为什么是删缓存而不是更新缓存?(更新可能被并发覆盖/计算成本高不一定被读)
  • 先删缓存还是先更新 DB?为什么?(先更新 DB 再删缓存更安全,不一致窗口更短)
  • 延迟双删的延迟时间怎么确定?(主从同步延迟 + 一次读取时间 + 冗余)

易错点:

  • ❌ "Cache Aside 保证强一致"——只保证最终一致,极端并发仍可能短暂不一致
  • ❌ "删除失败了怎么办"——需要重试机制(消息队列重试/Canal 异步补偿)

💡 记忆锚点

Cache Aside口诀"读穿写删":读时缓存没有就查DB再填缓存(穿透回源),写时先改DB再删缓存(删而非更新,因为更新像往公告栏贴新告示容易被别人覆盖,删掉让下次来的人自己去查最新的)。