Redis一致性问题

文章讨论了一致性的概念,包括强一致性、弱一致性及最终一致性。提到了Redis与数据库保证一致性的几种方法,如先更新数据库再删除缓存或反之,并分析了各自存在的问题和解决方案,如失败重试、延时双删、订阅binlog以及引入消息队列来处理缓存删除失败的情况。

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

(1)何为一致性?

  • 1、定义:

    • 指系统中各节点数据保持一致。
      • 分布式系统中,可以理解为多个节点中的数据是一致的。
  • 2、分类:

    • 强一致性:写进去的数据是什么,读出来的数据就是什么。
    • 弱一致性:只保证到某个时间级别后,数据能达到一致。
      • 最终一致性:在某个时间点后数据会达到一致。

(2)Redis与数据库如何保证一致性?/Redis一致性问题?

  • 1、先删除缓存,再更新数据库;
  • 2、先更新数据库,再删除缓存;
  • 3、先更新缓存,再更新数据库;
  • 4、先更新数据库,再更新缓存;

(3)更新缓存和删除缓存如何选择?

  • 更新缓存:
    • 使用场景:数据使用较为频繁
  • 删除缓存:
    • 使用场景:数据使用频率不高

(4)先删除缓存,再更新数据库存在问题?及其解决方案?

在这里插入图片描述

  • 存在问题:
    • 删除缓存成功,更新数据库失败:导致缓存中的数据被B更新为旧数据。
  • 解决方案:
    • 失败重试 + 延时双删:
      • 对于数据库更新失败,加入更新失败重试机制,数据库更新成功后,延时一段时间,再次删除缓存。

(5)先更新数据库,再删除缓存存在问题?及其解决方案?

  • 存在问题:
    • 更新数据库成功,删除缓存失败:此时缓存中为旧数据,导致其他线程读取到旧数据。
  • 解决方案:
    • 对于删除缓存失败:
      • 订阅binlog:数据库的每一步操作均会写入binlog日志,可以通过监听binlog,实时感知数据变化情况,根据数据变化情况删除redis并添加重试机制,直至redis删除成功。
      • 引入消息队列
        若Redis删除失败,则将Redis key放入消息队列,消费端监听消息队列并删除Redis直至删除成功。

(5)总结

  • 数据库更新失败:失败重试,延时双删。
  • 缓存删除失败:订阅binlog/引入消息队列。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值