问题
因为数据库与充当缓存的 Redis 不是同个事务,所以会出现 Redis 缓存脏数据的情况。本文章主要提供另一种思路保证Redis缓存一致,至于其它更多方案可以参考其他作者写的文章juejin.cn/post/685041…
方案
通过新增张"缓存变更表",在更新数据库记录时,也往"缓存变更表"中新增缓存信息(同个事务中)。这样在事务提交后,可以根据"缓存变更表"再次删除对应的缓存,避免Redis缓存脏数据。
1. 建立数据库表xxxx_cache_change_log(表名根据实际情况而定)。
| 字段 | 描述 |
|---|---|
| id | 记录id |
| cache_name | 缓存名称 |
| cache_key | 缓存键 |
2. 更新需缓存到Redis中的数据库记录的步骤。
- a. 更新数据库记录。
- b. 插入缓存相关信息到 xxxx_cache_change_log。
- c. 删除 Redis 中缓存的该记录。
- d. 提交数据库事务。