如何保证Redis与Mysql的数据库一致性

解决方案

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

当缓存更新成功,数据库还未更新或者更新失败,就会造成数据不一致

二、先更新数据库,再更新缓存

在高并发的环境下,数据库数据更新,而缓存中的数据还没有来得及更新,这时执行查询,缓存命中,就会查到原来的数据,Redis与Mysql数据不一致。

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

在高并发的环境下,删除缓存后,还没来得及更新数据库,这是Redis又会查到原来数据,造成Redis与Mysql数据不一致。

四、先删除缓存,再更新数据库,再删除缓存(延时双删)

先删除缓存,再更新数据库,再延时(为了保证缓存已经构建好了再删除)删除缓存,但是延时会造成阻塞,不适合高可用系统

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

更新数据库,再删除缓存,如果删除失败,异步发送到消息队列,利用MQ重试机制去不断删除,保证最终一致性,适合高并发场景,但是程序耦合度较高

解决方案:使用canal。(原理:canal将自己伪装成mysql从机去不断监听binary log(二进制日志文件),当数据发生变化,它会主动给MQ发送一个消息去删除缓存,不用在代码中实现,完成解耦和)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值