redis 使用场景 - 双写一致性

文章讨论了在高一致性要求下,如何处理MySQL到Redis的数据同步。采用了延迟双删策略以减少脏数据,解释了为何需要两次删除缓存以及延迟的原因。此外,提到了使用读写锁保证强一致性和通过MQ或canal实现异步通知的方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

设置前提(业务场景):

        一致性要求高

        允许延迟一致

双写一致性:当修改了数据库的数据也要同时更新缓存数据,缓存和数据库数据要保持一致 

读操作:缓存命中,直接返回;缓存未命中查询数据库,写入缓存,设定超时时间

写操作:延迟双删        

删除缓存--------------------> 修改数据库-------------------->删除缓存

1.先删除缓存、还是先修改数据库:都会导致脏数据出现

2.为什么要删除两次缓存?         避免脏数据出现

3.为什么要延时删除?        主从模式,读写分离,同步数据不确定延时时间也有脏数据

 redis中缓存数据为   读多写少,所以我们可以用共享锁和排他锁

读写锁可以保证强一致,但是性能低

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

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

允许延时一致的业务,采用异步通知

1、使用MQ中间件,更新数据后,通知缓存删除

2、利用canal中间件,不需要修改业务代码,伪装为MySQL的一个从节点,canal通过读取binlog数据更新缓存

 强一致性的话,采用Redisson提供的读写锁

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

2、排他锁:独占锁writeLock也叫写锁,加锁后,阻塞其他线程读写操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值