延迟双删 (Delayed Double Delete) 是一种在更新数据库后,通过“立即删除 + 延迟再次删除”缓存的组合拳,来彻底解决主从延迟导致脏数据回填的增强方案。

核心逻辑

该方案是 旁路缓存 (Cache Aside) 的增强版。它在标准的“先更库再删缓存”基础上,增加了一次延迟删除

步骤操作目的
1. 更更新数据库修改业务数据(主库)
2. 删立即删除缓存使缓存失效,后续读请求触发回填
3. 延休眠一小段时间 (如 500ms)等待主从同步完成
4. 删再次删除缓存清理在主从同步期间因读请求产生的脏数据
sequenceDiagram
    participant App as 应用程序
    participant Redis as 缓存
    participant Master as 主库 (Write)
    participant Slave as 从库 (Read)

    App->>Master: 1. 更新数据库
    App->>Redis: 2. 立即删除缓存
    Note over Master, Slave: 主从同步中 (存在延迟)
    rect rgb(240, 240, 240)
        Note right of Slave: 此时读请求可能从从库读到旧值并回填缓存
    end
    App->>App: 3. 休眠 (如 500ms)
    App->>Redis: 4. 再次删除缓存 (清理脏数据)

痛点与对策

挑战技术对策
延迟时间难确定需大于“主从同步延迟 + 读请求回填缓存”的时间总和
吞吐量下降异步化处理第二次删除(如通过线程池或 MQ 延迟队列)
极端并发失效配合过期时间 (TTL) 兜底,或升级为 异步补偿 方案