关于redis:缓存和数据库数据的一致性的问题

40次阅读

共计 566 个字符,预计需要花费 2 分钟才能阅读完成。

如何保障缓存和数据库数据的一致性

更新机制

2 种更新机制的阐明

1. 触发更新

用户发动申请,缓存生效,从数据库中读取数据,更新缓存

2. 被动更新

管理员在后盾批改数据,删除缓存或者更新缓存

个别状况 2 种更新机制同时应用

缓存和数据库数据的一致性策略

1. 双写 – 先更新数据库,再更新缓存

被动 + 触发

管理员后盾批改数据,同时用户发动申请,脏数据的可能性

工夫T1T2T3T4T5
被动更新 更新数据库更新缓存
触发更新读缓存,生效读数据库 更新缓存

双被动

2 个管理员后盾同时批改数据,小概率

工夫T1T2T3T4
被动更新 A 更新数据库 更新缓存
被动更新 B 更新数据库更新缓存

双触发

双触发更新,最多导致 2 次更新缓存,个别加锁只更新 1 次

总结

双写会有 2 个问题

  1. 脏数据的小概率事件
  2. 性能节约

有认为你应用了缓存,必然是热数据,申请会很多,你不被动更新缓存,也会有用户触发更新缓存,并不存在性能上的节约。但不意味着每时每刻、所有数据都会被频繁申请,因而双写必然会导致局部性能的节约

2. 先删除缓存,再更新数据库

会导致 被动 + 触发,写入脏数据概率减少

3. 先更新数据库,再删除缓存

被动 + 触发,仍然有概率写入脏数据

4. 先更新数据库,再提早删除缓存

提早计划

  1. 代码间接提早,取决更新工夫
  2. 删除操作 退出队列,提早解决 删除操作
  3. 删除操作,退出队列,再提早

队列问题

  1. 队列数据失落的问题
  2. 解决队列操作时间差,缓存数据不统一
正文完
 0