Cache-Aside策略:
- 更新的时候,先更新数据库,然后再删除缓存。
因为如果如果先删除后更新,可能造成读到脏数据:请求1先把cache中的A数据删除 -> 请求2从DB中读取数据->请求1再把DB中的A数据更新。
但是如果先更新后删除:请求1更新DB -> 请求2读取缓存中旧数据 -> 请求1删除缓存中数据,也会导致读到旧数据。
所以我不太理解为什么要先更新后删除,都存在读到脏数据问题。
3 回答4.2k 阅读✓ 已解决
4 回答1.9k 阅读
1 回答774 阅读✓ 已解决
2 回答1.3k 阅读
3 回答694 阅读
757 阅读
690 阅读
如果是
先删除缓存再更新
,那每次更新时都需要删除缓存,无论更新失败与否,下次请求都还要把结果放到缓存中而
先更新再删除缓存
,如果更新失败,那么就不需要删除缓存而一致性问题都是会存在的,常用的解决方案是
延时双删
楼主所说的
脏读和一致性
不是同一个问题,一致性是指缓存和数据库的数据不一致了,缓存里的数据是旧数据(在删除缓存之后还是旧数据
)。而脏读只是读到了缓存里的旧数据,这个可以使用数据库的事务来解决,把更新数据库和删除缓存放在一个事务中,删除缓存之后再提交事务