redis、db数据一致性思考

5 篇文章 0 订阅
1 篇文章 0 订阅

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中方案都可以

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大勺哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值