怎么保证缓存和数据库数据的一致性?

  1. 从理论上说,只要我们设置了合理的键的过期时间,我们就能保证缓存和数据库的数据最终是一致的。因为只要缓存数据过期了,就会被删除。随后读的时候,因为缓存里没有,就可以查数据库的数据,然后将数据库查出来的数据写入到缓存中。除了设置过期时间,我们还需要做更多的措施来尽量避免数据库与缓存处于不一致的情况发生。
  2. 新增、更改、删除数据库操作时同步更新 Redis,可以使用事务机制来保证数据的一致性。

一般有如下四种方案,详情看这里:

  1. 先更新数据库,后更新缓存
  2. 先更新缓存,后更新数据库
  3. 先删除缓存,后更新数据库
  4. 先更新数据库,后删除缓存

第一种和第二种方案,没有人使用的,因为第一种方案存在问题是:并发更新数据库场景下,会将脏数据刷到缓存。

第二种方案存在的问题是:如果先更新缓存成功,但是数据库更新失败,则肯定会造成数据不一致。

目前主要用第三和第四种方案,详情看这里:

双写一致性方案一:先删除缓存,后更新数据库

双写一致性方案二:先更新数据库,后删除缓存

发表评论

后才能评论

评论(2)