Redis缓存与数据库一致性问题

610 阅读1分钟

问题

因为数据库与充当缓存的 Redis 不是同个事务,所以会出现 Redis 缓存脏数据的情况。本文章主要提供另一种思路保证Redis缓存一致,至于其它更多方案可以参考其他作者写的文章juejin.cn/post/685041…

方案

通过新增张"缓存变更表",在更新数据库记录时,也往"缓存变更表"中新增缓存信息(同个事务中)。这样在事务提交后,可以根据"缓存变更表"再次删除对应的缓存,避免Redis缓存脏数据。

1. 建立数据库表xxxx_cache_change_log(表名根据实际情况而定)。

字段描述
id记录id
cache_name缓存名称
cache_key缓存键

2. 更新需缓存到Redis中的数据库记录的步骤。

图片.png

  • a. 更新数据库记录。
  • b. 插入缓存相关信息到 xxxx_cache_change_log。
  • c. 删除 Redis 中缓存的该记录。
  • d. 提交数据库事务。

3. 定义定时任务/调度任务,根据 xxxx_cache_change_log 表中缓存的相关信息删除 Redis 中指定缓存。