数据库和缓存一致性问题

在业务中,常使用Redis作为缓存,数据库作为持久化存储。数据修改时会出现一致性问题。双写模式可能导致短暂脏数据,而失效模式虽简单,但也存在不一致情况。为解决一致性,可采用分布式锁或使用如Canal的中间件。
摘要由CSDN通过智能技术生成

一般来说我们的业务场景是把Redis作为缓存来用,而把关系型数据库作为持久化来用,那么当数据修改时就存在数据一致性的问题。而解决这种一致性问题主要有两种模式:双写模式和失效模式。

  • 双写模式
    在这里插入图片描述
    从上图可知,由于服务器存在网络分区问题(网络闪断、服务性能差异、CPU、内存等各种因素),存在写缓存不一致形成了短暂的脏数据。另外,可能存在更新逻辑比较复杂,如果再用复杂的逻辑去更新缓存得不偿失,因此在这种情况下双写模式并不是很合适。

  • 失效模式
    在这里插入图片描述

此模式相比复杂修改时要好一些,但同样存在缓存不一致的情况。

其实不管上面哪种模式都存在一些问题,但好在的是由于缓存只作为临时存储,一般来说可以容忍短暂的不一致性。但如果真的很在意一致性问题,可以采用分布式锁来控制;其次,如果数据更新的太频繁则没必要使用缓存,直接使用数据库即可。下面就数据一致性问题列举几种解决方案:
在这里插入图片描述

  • 使用阿里巴巴开源的中间件——Canal
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

养-乐多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值