如何保证 Redis 与数据库的数据一致性?

1.为什么会不一致 ? Redis 是缓存层,数据库是持久层。 二者数据可能不一致的原因包括: 更新数据库成功,但更新缓存失败; 缓存提前过期; 并发写操作覆盖(顺序问题); 异步更新延迟。 2.更新策略 2.1 Cache Aside(旁路缓存) 读操作 1. 读缓存 2. 如果缓存不存在 ,再读数据库 3. 将数据写入缓存(设置过期时间) 写操作: 先更新数据库,再删除缓存 缺点:删除缓存可能失败;删除顺序不当会不一致 2.2 Read/Write Through(读写穿透) 应用不直接访问DB,所有读写都经由缓存代理完成 缺点:实现复杂,性能略低 2.3 Write Behind(异步写回) 只写缓存,由缓存异步刷回数据库 缺点:容易丢数据 3.处理并发问题 3.1延迟双删策略(Double Delete) 1. 更新数据库; 2. 删除缓存; 3. 延迟 500ms 再删一次缓存。 //可以应对并发中缓存被“脏写”回的情况。 3.2异步消息队列(MQ) 数据更新时发送 MQ 消息,异步同步缓存状态。 3.3分布式锁 保证更新操作串行执行,避免交叉覆盖。

2025年10月14日 · Mumu