Redis之双写一致性篇

本文探讨了如何在Redis缓存和MySQL数据库间实现数据同步,包括延迟双删、分布式锁、读写锁、异步通知等方法,以及它们在强一致性和最终一致性下的适用场景和优缺点。
摘要由CSDN通过智能技术生成

首先感谢某马老师的详细讲解让我醍醐灌顶!!!本文章为学习笔记

问题:redis作为缓存,mysql的数据如何与redis进行同步?

双写一致性:当修改了数据库的数据同时更新redis缓存的数据,缓存和数据库必须要保持一致性(强一致性或者最终一致性都行反正就是一致即可)

解决方案一:延迟双删

如果是写操作,我们先把缓存中的数据删除,然后更新数据库,最后再延时删除缓存中的数据

可以通过两次删除缓存来控制脏数据,但是延迟的时机很难把握,所以无法完全杜绝脏数据,不能做到强一致性

强一致性的解决方案

解决方案一:分布式锁(强一致性但是性能较低)

解决方案二:读写锁(性能比分布式锁要好一点点)

适用于读多写少的情况

共享锁:读锁readLock,加锁以后,其他线程可以共享读操作

排他锁:独占锁writeLock,加锁以后,阻塞其他线程读写操作

最终一致性的解决方案:异步通知

基于MQ的异步通知

当我们修改数据写入到mysql以后,就会发一条消息给MQ,在缓存服务这一块就要去监听mq,然后再去更新mq即可。缓存修改肯定是有延迟的,需要保证MQ的可靠性

基于cannal

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值