giftiaのblog

缓存与数据库双写一致性

· 更新于 · giftia

为什么不一致

img

缓存与数据库双写一致性方案

1. 更新数据库之后删除缓存(解决部分不一致)

2. 加分布式锁(完全一致性,性能较差)

3. canal 异步更新缓存(最终一致性,性能较好)

img

4. 设置较短的过期时间(最终一致性,性能较好,最简单)

延迟双删(方案1的优化)

处理缓存删除与数据库更新之间的并发请求:

  1. 先删除 Redis 缓存
  2. 更新 MySQL
  3. 延迟一小段时间(如几百毫秒),再次删除 Redis 缓存

延迟目的是清除在时间窗口内并发读请求写入的旧数据。