旁路缓存策略的缓存一致性问题?

Cache-Aside策略:

  • 更新的时候,先更新数据库,然后再删除缓存

因为如果如果先删除后更新,可能造成读到脏数据:请求1先把cache中的A数据删除 -> 请求2从DB中读取数据->请求1再把DB中的A数据更新。
但是如果先更新后删除:请求1更新DB -> 请求2读取缓存中旧数据 -> 请求1删除缓存中数据,也会导致读到旧数据。
所以我不太理解为什么要先更新后删除,都存在读到脏数据问题。

阅读 2.6k
1 个回答

如果是先删除缓存再更新,那每次更新时都需要删除缓存,无论更新失败与否,下次请求都还要把结果放到缓存中

先更新再删除缓存,如果更新失败,那么就不需要删除缓存

而一致性问题都是会存在的,常用的解决方案是延时双删

楼主所说的脏读和一致性不是同一个问题,一致性是指缓存和数据库的数据不一致了,缓存里的数据是旧数据(在删除缓存之后还是旧数据)。而脏读只是读到了缓存里的旧数据,这个可以使用数据库的事务来解决,把更新数据库和删除缓存放在一个事务中,删除缓存之后再提交事务

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏