加载中...

延迟双删是 Cache-Aside 模式下缓解「缓存与数据库不一致」的常用策略:写请求先删除缓存,再更新数据库,随后等待一小段时间(如几百毫秒,视业务读耗时而定)再删除一次缓存。
只删一次存在经典竞态:写请求删缓存后、数据库提交前,一个读请求未命中缓存、读到旧值,并在数据库更新完成后把旧值写回缓存,脏数据将驻留到 TTL 结束。第二次延迟删除正是为了清掉这种被并发读回填的旧值;延迟时长需覆盖「读库 + 回填缓存」的耗时,主从架构下还要加上复制延迟。
延迟双删仍是概率性方案:延迟时间难以精确设定,第二次删除失败同样导致脏数据。工程上常配合删除重试队列、订阅 binlog(如用 Canal)异步删缓存、以及给缓存设置兜底 TTL,把不一致窗口压缩到可接受范围。
它是最终一致性手段,不适用于要求强一致读的场景。

登录 后参与讨论
暂无讨论,来发表第一条评论吧