Redis与数据库双写一致性问题

博客探讨了Redis与数据库双写一致性问题,包括先删除缓存还是先操作数据库的权衡,延迟双删策略,读写锁实现强一致性,以及在业务一致性要求不那么高时,如何通过异步通知如Canal保证数据最终一致性的方法。
摘要由CSDN通过智能技术生成

Redis与数据库双写一致性问题

什么是双写一致性问题

所谓的双写一致性是当修改数据库的数据也要同时更新缓存数据,数据库和缓存要保持一致。

因为写和读是并发操作,没法保证顺序,就会出现缓存和数据库的数据不一致的问题。

讨论这个问题的前提是明确业务场景。如果业务一致性要求比较高,需要采用的是一种方案,如果业务允许延迟一致,则又是另一种方案。

业务一致性要求比较高

先删除缓存还是先操作数据库?

两种方式都会有问题。

先删除缓存再操作数据库

该方案会导致不一致的原因是。同时有一个请求A进行更新操作,另一个请求B进行查询操作。那么会出现如下情形:

(1)、请求A进行写操作,删除缓存

(2)、请求B查询发现缓存不存在

(3)、请求B去数据库查询得到旧值

(4)、请求B将旧值写入缓存

(5)、请求A将新值写入数据库 上述情况就会导致不一致的情形出现。而且,如果不采用给缓存设置过期时间策略,该数据永远都是脏数据。

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

假设这会有两个请求,一个请求A做查询操作,一个请求B做更新操作,那么会有如下情形产生

(1)请求A查询数据库,得一个旧值

(2)请求B将新值写入数据库

(3࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值