Redis 缓存刷新策略

4 篇文章 0 订阅

使用 Redis 作为 MySQL 的前置缓存时,需要注意的问题

要考虑是先更新缓存、再更新数据库,还是先更新数据库、再更新缓存,是更新缓存还是删除缓存,这些情况很多会因为 2 个进程因为处理速度、网络速度问题导致脏数据的情况发生;

要保证最终一致性,其实使用 redis 的 ttl 即可,第一次修改后设置小点的 ttl,下次又会再更新,因为本身脏数据出现的机率就很小(尤其先更新数据库再删除缓存形式),多次更新最终肯定是正确的值。下面是使用 二次删除 + 异步延迟删除模式达到比较好的更新数据效果,同时和程序代码解耦;

使用 二次删除 + 异步延时删除策略

  1. 更新数据库数据
  2. 数据库将操作信息写入 binlog 日志当中
  3. 订阅程序(Canal、Maxwell、FlinkCDC 等)提取出所需要的数据以及 key
  4. 另起一段非业务代码,获取该信息
  5. 尝试删除缓存操作,如果正确删除了,过几百毫秒(考虑一次数据库写入的最大可能时间长度在增加一些毫秒数)后再次删除缓存(可以在非业务代码中 sleep,也可以放入消息队列中,再取一遍)
  6. 如果发现删除失败,将这些信息发送到消息队列中
  7. 非业务代码重新从消息队列中获取数据,重试删除操作
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值