外观
一句话答案
Cache Aside 模式:读时先查缓存未命中查 DB 写缓存,写时先更新 DB 再删除缓存,删而非更新避免并发覆盖。
核心要点
Cache Aside Pattern:
- 读:先读缓存→miss→读DB→写缓存
- 写:先更新DB→再删除缓存
为什么删而不更新: 更新缓存可能被并发覆盖 / 懒加载(下次读时才建)
强一致: Canal监听binlog异步删除缓存
追问与易错
追问方向:
- 为什么是删缓存而不是更新缓存?(更新可能被并发覆盖/计算成本高不一定被读)
- 先删缓存还是先更新 DB?为什么?(先更新 DB 再删缓存更安全,不一致窗口更短)
- 延迟双删的延迟时间怎么确定?(主从同步延迟 + 一次读取时间 + 冗余)
易错点:
- ❌ "Cache Aside 保证强一致"——只保证最终一致,极端并发仍可能短暂不一致
- ❌ "删除失败了怎么办"——需要重试机制(消息队列重试/Canal 异步补偿)
💡 记忆锚点
Cache Aside口诀"读穿写删":读时缓存没有就查DB再填缓存(穿透回源),写时先改DB再删缓存(删而非更新,因为更新像往公告栏贴新告示容易被别人覆盖,删掉让下次来的人自己去查最新的)。