延时双删两种实现对比分析

news2024/11/15 20:32:02

前言

延时双删(Delayed Double Deletion)是一种在分布式系统或缓存一致性处理中使用的技术,目的是确保缓存与数据库之间的数据一致性。它主要用于处理在高并发情况下,缓存和数据库可能出现的数据不一致问题。

常见更新策略的问题

简单的先删缓存再更新数据库或者先删除数据库再更新缓存都是有问题的。

先删缓存,再更新数据库

先说下这种操作可能出现的问题:

  1. 线程A删除缓存数据,此时还没更新数据库;
  2. 线程B查询缓存没有数据,查询数据库读到旧数据,然后放入缓存;
  3. 线程C及后续线程读到缓存中的旧数据,造成缓存和数据库不一致。

先删缓存,再更新数据库

先更新数据库,再删除缓存

这种方式还是比较常用,但是会造成短暂时间内数据库和缓存数据不一致,删除缓存操作比较快,这种情况下是可以接受。

  1. 线程A更新数据库,此时还没有删除缓存;
  2. 在线程A删除缓存之前,线程B及其他线程此时使用的是缓存中就旧数据,和数据库内容不一致。
  3. 极端情况下,在更新数据库之前缓存过期,C线程读了数据库旧数据,然后在A线程删除缓存之后才写入缓存,这种会造成后续的不一致,但是这种情况发生概念很低,还是要优于先删缓存,再更新数据库的情况。

先更新数据库再删缓存

延迟双删

针对以上情况,出现了延迟双删这种策略,但是又出现了两种常见方式,即:

  1. 先删缓存,再更新数据库,延迟一段时间再删一次缓存;
  2. 先更新数据库,再删缓存,延迟一段时间后再删一次缓存。

在讨论延时双删的两种不同实现方式时,需要考虑并发情况下的各种问题和风险。以下是对这两种方法的详细比较和分析:

先删缓存,再更新数据库,延迟一段时间后再删一次缓存

这种策略实现步骤如下:

  1. 删除缓存。
  2. 更新数据库。
  3. 延迟一段时间后再次删除缓存。

第一种延迟双删策略

并发问题分析

可能出现的情况:

  • 在删除缓存和更新数据库之间,读请求可能会访问到旧的数据,再次删除缓存之前的几秒内读到的都是脏数据。
  • 极端情况下,在删除缓存和更新数据库之间查到旧值的线程,在再删缓存之后才更新到缓存之中,造成后续的请求读缓存和数据库不一致。

优点

  • 操作简单,直接删除缓存和更新数据库,逻辑清晰。

缺点

  • 在高并发场景下,不容易保证缓存和数据库的一致性,容易出现数据不一致的问题。

先更新数据库,再删缓存,延迟一段时间后再删一次缓存

这种策略实现步骤如下:

  1. 更新数据库。
  2. 删除缓存。
  3. 延迟一段时间后再次删除缓存。

第二种延迟双删策略

并发问题分析

可能出现的情况:

  • 更新数据库后,如果在删除缓存之前有读请求过来,这些请求会读到旧的缓存数据,但最终会被延迟的删除操作清除。
  • 如果在更新数据库之前缓存过期,C线程读数据库旧数据,并在极端情况下在A线程延迟删缓存之后才覆盖缓存,后续请求读缓存和数据库不一致,不过这种情况发生概率极,合理设置延迟时间会让这种情况发生概率更低。

优点

  • 更容易保证数据一致性。即使在更新数据库后有并发写操作,延迟删除缓存可以最终确保缓存中的数据是一致的。

缺点

  • 可能会增加数据库的压力,因为在缓存删除和重新加载期间,所有读请求都会直接访问数据库。

总结

由上述分析,第二种延迟双删(先更新数据库,再删缓存,延迟一段时间后再删一次缓存)在高并发场景下更为安全和可靠。
载期间,所有读请求都会直接访问数据库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1906234.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5分钟微课视频制作方法 微课录制后期制作方法

微课视频是一种短小精悍的在线教育视频形式,通常时长在5到10分钟左右,观众可以在短暂的时间内获取到有用的信息。微课视频的目的是通过简洁明了的内容,向观众传递特定的知识点或技能,它的特点在于紧凑、便于消化和分享&#xff0c…

ESP32CAM物联网教学10

ESP32CAM物联网教学10 MicroPython 应用体验 小智偶然地发现,有一种新兴的编程模式MicroPython,也能编写ESP32Cam的应用程序了,于是欣然地体验了一把。 编程环境搭建 小智偶然地从下面这家店铺买了一块ESP32Cam,并从客服那里得到…

【人工智能】-- 智能家居

个人主页:欢迎来到 Papicatch的博客 课设专栏 :学生成绩管理系统 专业知识专栏: 专业知识 文章目录 🍉引言 🍉基于深度卷积神经网络的表情识别 🍈流程图 🍈模型设计 🍍网络架…

安全防御(防火墙)

第二天: 1.恶意程序---一般会具有一下多个或则全部特点 1.非法性:你未经授权它自动运行或者自动下载的,这都属于非法的。那恶意程序一般它会具有这种特点, 2.隐蔽性:一般隐藏的会比较深,目的就是为了防止…

UML建模工具Draw.io简介

新书速览|《UML 2.5基础、建模与设计实践 Draw.io是一个非常出色的免费、开源、简洁、方便的绘图软件,利用这款软件可以绘制出生动有趣的图形,包括流程图、地图、网络架构图、UML用例图、流程图等。它支持各种快捷键,免费提供了1000多张画图…

80+ ChatGPT 文献综述指令

进行文献综述通常似乎是一项艰巨的任务。它是学术和研究工作的重要组成部分,涉及对先前发表的与特定主题相关的研究进行全面和批判性分析。目标是深入了解该主题的知识状况,找出差距,并为进一步研究奠定基础。 传统上,文献综述是…

GuLi商城-商品服务-API-品牌管理-OSS整合测试(续)

Spring Alibaba简介 Spring官网:https://spring.io/projects/spring-cloud-alibaba GitHub:https://github.com/alibaba/spring-cloud-alibaba GitHub中文文档:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md…

气膜建筑如何在文化旅游行业中应用—轻空间

一、气膜建筑简介 气膜建筑是一种新型建筑形式,其主要结构由高强度膜材、空气支撑系统和固定系统组成。通过不断向膜体内部充气,使其形成稳定的内部压力来支撑整个建筑结构。气膜建筑因其建设速度快、成本相对较低、环保节能等优点,近年来在各…

怎么给电子文档批量盖骑缝章或公章?

怎么给电子文档批量盖骑缝章或公章?假如你有100个PDF电子文档要同时盖缝章,如果不借助专业的盖电子骑缝章软件,还真不好干。下面讲述如何利用e-章宝批量盖电子骑缝章。 1.在软件中导入待批量盖章的PDF文件 如下图,在“待盖章PDF文件”区域…

MySQL之表的约束(上)

目录 空属性(NULL) 实例建表 插入操作 默认值(default) 建表 插入操作 NULL与default的结合 列描述 建表 zerofill 建表 插入操作 主键 建表 插入 主键的增加与去掉 去掉 增加 复合主键 插入的影响 真正约束字段的是数据类型,但是数据类型约束很单一&a…

阶段三:项目开发---搭建项目前后端系统基础架构:任务13:实现基本的登录功能

任务描述 任务名称: 实现基本的登录功能 知识点: 了解前端Vue项目的基本执行过程 重 点: 构建项目的基本登陆功能 内 容: 通过实现项目的基本登录功能,来了解前端Vue项目的基本执行过程,并完成基…

【机器学习】属性降维:揭示数据的简化之美

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 属性降维:揭示数据的简化之美引言什么是属性降维?为何降…

(二)前端javascript中的数据结构之栈

栈是一种遵从后进先出(LIFO)原则的有序集合。新添加的或待删除的元素都保存在栈的 同一端,称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。 栈是限定仅在表的一端进行插入和删除操作…

SpringBoot源码阅读(3)——监听器

ApplicationListener类初始化位置 在类SpringApplication的构造方法,第267行 在META-INFO/spring.factories中配置的实现类 spring-boot # Application Listeners org.springframework.context.ApplicationListener\ org.springframework.boot.ClearCachesApplic…

一分钟教会你,iPhone和安卓手机虚拟摄像头如何连接电脑?手机连接电脑虚拟摄像头!

在当今的远程工作和在线学习时代,摄像头的需求日益增长。然而,有时我们可能会遇到电脑摄像头画质不佳或无法使用的情况。此时,利用手机的高清摄像头作为电脑的虚拟摄像头,便成了一个理想的选择。本文将为您介绍如何将iPhone和安卓…

SpringMVC系列十三: SpringMVC执行流程 - 源码分析

源码分析 执行流程图实验设计前端控制器分发请求处理器映射器处理器适配器调用目标方法调用视图解析器渲染视图作业布置 执行流程图 实验设计 1.新建com.zzw.web.debug.HelloHandler Controller public class HelloHandler {//编写方法, 响应请求, 返回ModelAndViewRequestMa…

拥抱 AGI:PieDataCS 引领云原生数据计算系统新范式

自2023年后,人工智能技术进入了一个更为成熟和广泛应用的阶段,人工通用智能(AGI)这一概念也成为了科技界和产业界热议的焦点。本文将结合 AGI 时代背景,从架构设计到落地实践,详细介绍拓数派云原生数据计算…

掌握全球通用的建模语言,从《Archimate®3.2规范参考卡》开始!

作为企业架构设计的通用语言,Archimate更是一种愿景的体现,一个变革的引擎,它不仅可以与TOGAF标准高效结合,还可助力全球企业无边界协作使用(下滑可了解更多Archimate建模语言的发展和演进)! 本…

PMP 认证权威吗?对项目…业生涯的发展有帮助?

PMP认证到底权威吗? 首先在我看来,PMP认证是否权威要从各个角度进行综合考虑。入行这么多年个人也有不少的体会,那么我们就从多个角度进行分析一下,PMP认证的权威性与促进方面。 在深入探讨这个话题前,我分享一下近期…

双向链表 -- 详细理解和实现

欢迎光顾我的homepage 前言 双向链表是一种带头双向循环的链表。在双向链表中,首先存在着一个头结点;其次每个节点有指向下一个节点的指针next 和指向上一个节点的指针prev &#xff1b…