redis

本文探讨了如何在MySQL与Redis之间实现双写一致性,涉及缓存命中、写操作的延迟双删策略,以及针对强一致性和性能提升的不同方法,如读写锁和异步通知。还提及了阿里Canal在数据一致性解决方案中的应用。

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

redis

(四)双写一致性(mysql数据库与redis进行同步)

⭐前提:需要具体问题具体分析,是要求强一致性还是不要求,可使用不一样的方法进行。

定义:当修改了数据库的数据也要同时更新缓存的数据,缓存和数据库的数据要保持一致。

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

写操作:延迟双删

含义:删除缓存->修改数据库->删除缓存【有脏数据的风险】

1.先删除缓存还是先修改数据库?无论是先删除缓存还是先删除数据库,都是有脏数据的风险。

2.为什么要删除两次缓存?降低脏数据风险的概率。

3.为什么要延时删除?因为DB是主从模式,读写分离的,我们需要等一会儿,让主节点同步到从节点,从而需要延时删除。但是,延时的时间不好设定,在延时的期间,会有脏数据出现的风险。

如果需要强一致性,那么需要使用分布式锁的模式(性能会差)。

如何稍微提升性能?(读写锁)

因为缓存中的数据读多写少,从而可以使用读写锁分开来:当一个线程读取数据时,给他加一个共享锁,其他线程也可以读取数据;当一个线程正在写入缓存时,添加排他锁,阻塞其他线程的读写操作。

如果不需要强一致性,那么可以有以下的解决方法。

1、异步通知保证数据的最终一致性
在这里插入图片描述
2、基于Canal(阿里产品)的异步通知
在这里插入图片描述
二进制日志(binlog)记录了所有DDL(数据定义语言)和DML(数据操纵语言),但不包括查询的语句。

面试相关:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值