redis和数据库的一致性问题笔记

原则:以数据库的数据为标准

分为实时一致性和最终一致性。

  •  缓存使用场景

  • 更新或者删除数据时
    • 先操作redis还是先操作数据库
    • 更新redis数据,是直接更新还是直接删除?  正常是直接删除del
  • 方案1:先更新数据库,再删除缓存

正常情况:全部成功或者第一步失败

异常情况:删除redis失败,Redis旧数据

解决方案:重试,再删除。可以将删除Redis失败的数据放入mq中,让mq再去删除一次,但是这样中的风险是增加了代码入侵性,不同业务增加不同的队列。也可以解析mysql bonlog日志,确认这个是更新操作,在做redis的del操作。

  • 方案2:先删除redis,再更新数据库

正常情况:全部成功或者第一步失败

异常情况:删除redis成功,更新数据库失败

解决方案:在并发场景中存在ABA的问题。可以是用延时双删的方式。

redis.delKey(123);

update.key(data);

Threep.sleep(100);

redis.delKey(123);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值