当前位置: 首页 > news >正文

redis延时双删,为什么第一次删除

Redis延时双删策略中第一次删除的作用

在缓存与数据库一致性方案中,"延时双删"(Delayed Double-Delete)是一种经典策略,其核心流程如下:

  1. 第一次删除:更新数据库前,先删除缓存

  2. 更新数据库:执行数据库写操作

  3. 第二次删除:延迟一段时间后,再次删除缓存


第一次删除的核心作用
1. 防止旧缓存污染
  • 场景:在并发写请求时,如果没有第一次删除:

    • 线程A更新数据库(新值)

    • 线程B在A更新数据库后但未删除缓存前,读取了旧缓存

    • 结果:缓存中残留旧数据,导致不一致

  • 第一次删除确保更新数据库前,缓存已被清除,强制后续读请求回源到数据库获取最新值。

2. 降低“写后读”不一致窗口期
  • 即使有并发读请求在第一次删除后、数据库更新前发生:

    • 由于缓存已被删除,读请求会从数据库加载即将更新的新值(而非旧值)。

    • 比不删除缓存直接更新数据库的窗口期更短。

3. 配合第二次删除形成“双保险”
  • 第一次删除:主动清除可能的脏数据

  • 第二次删除(延迟后):清理并发读请求可能引入的旧缓存

  • 两者结合可将不一致时间窗口压缩到毫秒级。


为什么需要第二次删除?

第一次删除无法完全避免以下场景:

  1. 并发读请求在第一次删除后、数据库更新前发生

    • 线程A删除缓存(第一次删除)

    • 线程B读缓存未命中,从数据库读取旧值并回填缓存

    • 线程A更新数据库为新值

    • 结果:缓存中是旧数据

  2. 数据库主从延迟

    • 从库未同步最新数据时,读请求可能读取到旧值并回填缓存。

第二次删除通过延迟清理(通常500ms-1s)确保:

  • 主从数据库已完成同步

  • 并发读请求的旧缓存已回填并被清理


完整流程示例

图表

代码

下载

DBCacheClientDBCacheClient延迟时间需覆盖:- 主从同步耗时- 并发读请求处理时间1. 第一次删除缓存(DEL key)2. 更新数据库(UPDATE)3. 延迟后第二次删除(DEL key)


适用场景
  • 写多读少:频繁更新时减少缓存不一致风险

  • 对一致性要求较高:如金融、订单状态等业务

  • 无法使用订阅数据库日志(如Canal)的场景


注意事项
  1. 延迟时间设置

    • 通常500ms-1s,需根据主从同步时间和业务RT调整

    • 过长:影响实时性;过短:可能未覆盖脏数据回填

  2. 删除失败处理

    • 建议增加重试机制或异步消息队列保障删除成功

  3. 替代方案

    • 更强一致性方案:Redisson分布式锁 + 串行化读写

    • 最终一致性方案:订阅数据库Binlog(如Canal)自动更新缓存

第一次删除是延时双删的前置防御,第二次删除是后置补偿,两者结合才能最大化降低不一致风险。

http://www.lqws.cn/news/571339.html

相关文章:

  • 检查达梦外部表
  • ROS的可视化工具rviz介绍
  • wpf的Binding之UpdateSourceTrigger
  • PaddleNLP
  • 桌面小屏幕实战课程:DesktopScreen 18 FONTPAINT
  • RAG检索增强生成在垂类AI应用效能优化中的应用
  • 【硬核数学】6. 升级你的线性代数:张量,深度学习的多维数据语言《从零构建机器学习、深度学习到LLM的数学认知》
  • 【Java EE初阶 --- 多线程(进阶)】锁策略
  • 构建创意系统:驾驭Audition与Photoshop的AI之力,洞悉原子化设计哲学
  • Cursor1.1.6安装c++插件
  • MyBatis实战指南(八)MyBatis日志
  • 【数据集处理】基于 3D-GloBFP建筑轮廓数据 栅格化建筑数据(完整Python代码)
  • Day.46
  • 水果维生素含量排名详表
  • 【硬核数学】9. 驯服“梯度下降”:深度学习中的优化艺术与正则化技巧《从零构建机器学习、深度学习到LLM的数学认知》
  • 【JavaSE】反射学习笔记
  • 中州养老:学会设计数据库表
  • WebRTC(十三):信令服务器
  • Spring事件驱动模型核心:ApplicationEventMulticaster初始化全解析
  • 图书管理系统练习项目源码-前后端分离-使用node.js来做后端开发
  • NV064NV065美光固态闪存NV067NV076
  • 申论审题训练
  • DEPTHPRO:一秒内实现清晰的单目度量深度估计
  • 云端可视化耦合电磁场:麦克斯韦方程组的应用-AI云计算数值分析和代码验证
  • Leetcode百题斩-双指针
  • 电容屏触摸不灵敏及跳点问题分析
  • PyEcharts教程(010):天猫订单数据可视化项目
  • ISP Pipeline(9):Noise Filter for Chroma 色度去噪
  • H3C-路由器DHCPV6V4配置标准
  • 如何通过自动化减少重复性工作