redis、db数据一致性思考

文章探讨了在高并发场景下,使用Redis与DB同步数据时遇到的一致性问题,包括先更新DB后删除Redis的方案、延时双删策略以及利用db日志解析的异步更新。重点讨论了两种常见方案的优缺点和极端情况下可能存在的问题,以及分布式锁的应用和性能影响。

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

redis、db数据一致性思考

常见的以下方案:

1、先更新db,再删redis ,读数据先读redis,没有的话读db并写入redis

存在的问题q1:假若删redis失败,那么一直读到的是脏数据
补充说明:删失败可以加重试
高并发读、写场景下存在的问题q2:

写线程a写线程b读线程c
t1更新db=2
t2删redis
t3读redis没有,查db=2
t4更新db=3
t5删redis
t6写入redis 2
t7

备注:一般redis数据删除不会有问题的q1问题几乎不用考虑。q2问题是重点

2、延时双删:先删redis ,再更新db,加延时再删redis

双删的其中一个目的是为了减轻q1的问题
延时双删只能缓解q2的问题,但不能100%解决,如下:
假若当前db中数据为1

线程a写线程b读
t1删redis
t2读redis没有,查db=1
t3更新db=2
t4把db=1写入redis
t5延迟短暂时间删redis

延时双删的话,可以根据 读线程查询db并更新redis的总时间设置延时时间(也还不能保证100%不出现q2类的问题)

延时删除可以采用mq异步去删除,这样就不会阻塞写线程。

3、db日志解析

如通过解析binlog日志,异步更新缓存数据

在上述前2种方案中,可以应对大部分场景。极端场景下q2的问题还是存在的。如果对数据一致性要求很高的话,要彻底避免,加分布式锁是可以的,但对性能有影响

如果对一致性要求不高的情况,定时删除或者用上述2中方案都可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大勺哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值