Redis 缓存与数据库双写一致性

双写一致性要求:
缓存不能读到脏数据
缓存可能会读到过期数据,但要在可容忍时间内实现最终一致
这个可容忍时间尽可能的小

一.先更新数据库,再更新缓存

线程A更新数据库,线程A更新缓存
线程B更新数据库,线程B更新缓存

因为网络等原因,线程A更新缓存晚于线程B更新缓存,导致缓存与数据库不一致

延时双删

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

线程A删除缓存,线程A更新数据库;
线程B查询缓存不存在,更新缓存
线程A更新数据库晚于线程B更新缓存,导致缓存与数据库不一致

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

缓存失效,线程A查询数据库,设置缓存
线程B更新数据库,删除缓存
线程A在线程B更新缓存后将之前查询的数据库旧值设置到缓存

最终一致性:

使用canal监听订阅的binlog,发送消息到业务系统实现更新缓存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值