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

更新机制

2种更新机制的阐明

1. 触发更新

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

2. 被动更新

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

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

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

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

被动+触发

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

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

双被动

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

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

双触发

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

总结

双写会有2个问题

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

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

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

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

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

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

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

提早计划

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

队列问题

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