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

更新数据时,是先删缓存还是先更新数据库?
其实先删除在更新也有线程安全问题
无论是先删除,还是先更新数据库都会有问题

先删除缓存再更新数据库的方案也存在着线程安全的问题,例如,线程 A 更新缓存,同时,线程 B 读取缓存的数据。可能会出现下面的执行顺序。

(1) 线程 A 删除缓存(2) 线程 B 查询缓存,发现缓存中没有想要的数据(3) 线程 B 查询数据库中的旧数据(4) 线程 B 将查询到的旧数据写入缓存(5) 线程 A 将新数据写入数据库

此时,就出现了数据库中的数据和缓存中的数据不一致的情况。
如果删除缓存失败,也会出现数据库数据和缓存数据不一致的现象。

在实际的生产环境中,推荐 使用先更新数据库再删除缓存

可以采用重试机制
在这里插入图片描述
流程如下所示
(1)更新数据库数据;
(2)删除缓存数据失败
(3)将需要删除的 key 发送至消息队列
(4)自己消费消息,获得需要删除的 key
(5)继续重试删除操作,直到成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值