延迟双删:时间差实验室
Cache Consistency · v1 → v2
按真实发生顺序排列
快照决定 B 拿到哪个版本;完成读取的时刻决定它何时回填。
脏缓存
终态数据库
v2
终态缓存
v1
延迟从哪里来
第二次删除至少要覆盖“旧快照读取完成并回填”的尾部时间。估算时应看慢查询、从库复制和网络抖动的高分位,并用监控持续校准。
没有一个固定毫秒数能证明正确。流量、数据量和故障状态一变,原来的安全余量就可能消失。
别在请求线程里 sleep
让接口线程原地等待,会占住连接和线程池,把一次缓存权衡放大成吞吐问题。把第二次删除写成可重试的延迟任务,更容易观测失败和积压。
提交数据库
投递延迟队列
消费并重试 DEL