延迟双删
延迟双删
def update(uid, data):
redis.delete(f'user:{uid}') # 1) 先删(可选)
db.update(uid, data) # 2) 写库
time.sleep(0.5) # 3) 等读回填的并发窗口过去
redis.delete(f'user:{uid}') # 4) 再删一次方案
| 方案 | 一致性 | 成本 |
|---|---|---|
| 先写库再删缓存 | 秒级不一致可接受 | 低(主流) |
| 延迟双删 | 更小窗口 | 中(sleep 不优雅) |
| 订阅 binlog 删除 | 接近最终一致 | 高(需要 CDC 链路) |
| 强一致读主库 | 一致 | 回到数据库压力 |
讨论一致性前先定义「业务能容忍多久的旧数据」:缓存不是数据库,追求强一致通常要牺牲缓存的价值。