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

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

更新机制

2种更新机制的阐明

1. 触发更新

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

2. 被动更新

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

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

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

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

被动+触发

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

工夫 T1 T2 T3 T4 T5
被动更新 更新数据库 更新缓存
触发更新 读缓存,生效 读数据库 更新缓存

双被动

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

工夫 T1 T2 T3 T4
被动更新A 更新数据库 更新缓存
被动更新B 更新数据库 更新缓存

双触发

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

总结

双写会有2个问题

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

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

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

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

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

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

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

提早计划

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

队列问题

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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理