Redis高并发 数据库缓存双写不一致

双写不一致 指的是redis中的数据和数据库中的数据不一致的问题

1. 原因分析

(1) “修改 DB 更新缓存”场景

 

 

数据库里面的库存为 10

请求a 请求删除3个库存

数据库更新 库存为7

请求b 请求删除5个库存

数据库更新 库存为2

redis更新 缓存为2

这时请求a的redis更新 缓存更新为7 (出问题了)


(2) “修改 DB 删除缓存”场景

 

2. 如何解决

原因出现了 两个请求的并行处理  

(1) 解决方案:延迟双删

延迟双删方案是专门针对于“修改 DB 删除缓存”场景的解决方案。但该方案并不能彻 底解决数据不一致的状况,其只可能降低发生数据不一致的概率。 延迟双删方案是指,在写操作完毕后会立即执行一次缓存的删除操作,然后再停上一段 时间(一般为几秒)后再进行一次删除。而两次删除中间的间隔时长,要大于一次缓存写操 作的时长

(2) 解决方案:队列

以上两种场景中,只所以会出现数据库与缓存中数据不一致,主要是因为对请求的处理 出现了并行。只要将请求写入到一个统一的队列,只有处理完一个请求后才可处理下一个请 求,即使系统对用户请求的处理串行化,就可以完全解决数据不一致的问题,如果是分布式系统,可以使用分布式队列

        缺点:把并发执行的请求变成了串行执行,会导致性能下降

(3) 解决方案:分布式锁

使用队列的串行化虽然可以解决数据库与缓存中数据不一致,但系统失去了并发性,降 低了性能。使用分布式锁可以在不影响并发性的前提下,协调各处理线程间的关系,使数据 库与缓存中的数据达成一致性。

只需要对数据库中的这个共享数据的访问通过分布式锁来协调对其的操作访问即可


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值