【改进延时双删的一些思考】

本文探讨了延时双删策略在数据一致性方面存在的问题,并提出了一种改进方法。通过在Redis中设置useCacheFlag来控制缓存查询路径,确保更新数据时在Redis事务中完成缓存删除与置零操作,同时在异常情况下通过queryTime判断并恢复缓存使用,从而保证了数据一致性。
摘要由CSDN通过智能技术生成

延时双删的问题

延时双删也不能保证完全数据一致——第二次删除失败就可能不一致了。

我思考了一个方法可以保证始终数据一致。

改进方法

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 新增Redis 键 useCacheFlag = 1;
  2. 查询时,先查useCacheFlag,如果为 1,则查询缓存。否则查询 DB。如果useCacheFlag = 1,不更新缓存。

更新数据过程

  1. 在一个Redis事务中:删除缓存,并set useCacheFlag = 0。事务成功才下一步,否则一直重试。

  2. 修改 DB,在修改完成前,缓存都一直为空。此时查询全部走 DB,且useCacheFlag = 0时,不更新到缓存。即使 DB 更新失败也没关系,重试。

  3. 在一个 Redis 事务中,更新缓存,再设置useCacheFlag = 1。事务不成功一直重试。

整个过程 DB 和缓存数据都是一致的,不管更新 DB 失败,还是Redis 事务失败,数据都是始终一致的。Redis 事务失败可能只执行部分。且不会回滚。

异常情况

最坏的情况,应用服务器和 Redis服务器都可能宕机。
Redis 宕机,只可能导致查数据库,或一直重试ÿ

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值