缓存与数据库数据一致性问题

在用了redis缓存的系统中,正常情况下,一个读操作会先查缓存,如果在缓存中查到了,则直接返回,如果缓存中没有,则会查数据库,再将查到的数据写到redis中,然后返回。如下图:

 

 这样的流程没有啥问题,但是当数据变更时,怎么把缓存变到最新,这就是缓存一致性要考虑的问题。

首先最容易想到的就是在更新数据库的时候同时更新缓存。这就涉及到先更新缓存还是先更新数据库的问题。其实无论是先操作哪一个都可能会出现缓存不一致问题。

首先就是两个操作不是原子性的。就可能出现一个成功一个失败的情况。先更新数据库,然后缓存更新失败,这样就会导致缓存中存在的是一个错误的旧值。先更新缓存,数据库更新失败时,这样读取到的缓存依然是不正确的。这还是没有并发的情况。

其次考虑在并发场景下,两个线程同时进行先更新缓存后更新数据库的操作:

 先更新数据库后更新缓存会导致一样的问题:

 然后还有一个发生概率比较低的并发场景,那就是读写并发。读的过程就是一开始说的先查缓存,缓存中有直接返回,没有则查数据库,查完再写到缓存然后返回。如果读写次序是:读线程先读缓存,缓存没有,查数据库值假如为10,这时候更新缓存和数据库的写操作执行了写数据库和缓存为20,然后读线程接着又更新缓存它从数据库查到的10。数据库中为20,缓存中为10,又导致了不一致,如图:

 所以更新缓存就不太行。就考虑直接删除缓存和更新数据库,由于是直接删除缓存,所以上面写写并发情况出现的不一致问题也就不存在了。而且删缓存相比于更新缓存更简单,也更不容易出错。因为很多情况下缓存中的数据可能并不是一个简单的字符串,而是一个比较大的JSON串,更新缓存要从缓存中反序列化得到对象然后更新,然后又要序列化成JSON再写到redis。而删缓存直接了当删掉,就很简单不容易出错。

但是删缓存依然存在两个操作无法保证原子性的问题:

假如先更新数据库后删缓存,删缓存失败了,就会导致缓存是旧值,数据不一致。

如果先删除缓存后更新数据库,即使更新数据库失败了也不会有脏数据,没什么影响,只要重试一次就好了。但是这种方案会无形中放大前面说的读写并发时的问题,因为先删缓存会增大缓存miss的概率(这种缓存Miss还可能会导致缓存击穿,可以通过加锁来解决)。还是前面的例子,一个读线程从缓存中没有查到值,然后查数据库查到10,这时候恰好一个写线程删缓存更新数据库为20,然后读线程更新缓存为10。这就又导致了不一致。

这种情况就要延迟双删来解决了,写线程先删缓存,写数据库后,延迟一会再删一次,这样就能把最后读线程写到缓存的脏数据给删掉了。延迟一般1~2秒。

总结一下延迟双删,第一次删除的目的是解决两个操作无法保证原子而导致不一致问题,所以选择先删缓存再更新数据库。第二次删除的目的是为了降低第一次删除而导致放大读写并发导致数据不一致的概率。

第二次删除失败怎么办?

也会出现,但第二次删除本来就是补偿性的。在读写并发这个小概率不一致事件中再失败,概率就更低。

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

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

相关文章

如何在 Ubuntu上搭建 LAMP

远程登录 Ubuntu系统环境 ssh (User)(IP) # 比如:ssh lennlouis192.168.207.128 为安全起见,建议你使用 root 登录 VPS 后创建一个具有 sudo 权限的帐号。 安装和配置 Apache 2 Apache Http Server 是一个开源的,非常流行,使用…

Mysql中间件和高可用

文章目录 一、MySQL中间件代理服务器MycatMycat应用场景Mycat部署 实现读写分离 二、MySQL高可用高可用解决方案MHA高可用实现MHA 一、MySQL中间件代理服务器 数据库主要分为两大类:关系型数据库与 NoSQL 数据库(非关系型数据库)。 数据库主…

CASS7.0按方向和距离绘制图形

1、绘制工具 2、按方向和距离绘制 (1)切换方向 (2)距离输入

维护和管理LDAP之OpenDJ

目录 基本介绍 服务专有名词 安装 命令行工具 密码管理 重置管理员密码 管理服务器进程 管理索引 如何搜索 管理索引 管理目录数据 测试数据 导出数据 导入数据 LDIF文件数据查看和比较 数据存储-Backends 配置连接 开启 HTTP/HTTPS连接 使用 REST访问 -open…

多特征线性回归

目录 一、多特征符号意义说明:二、多特征模型表示:三、Numpy向量表示、内积计算:1.向量表示:2.内积计算: 四、多元线性回归梯度下降算法: 一、多特征符号意义说明: x下标j:表示第j个…

Google Earth Engine(GEE)——控制台ui.Textbox复制你想要的textbox

结果 函数: ui.Textbox(placeholder, value, onChange, disabled, style) A textbox that enables the user to input text information. Arguments: placeholder (String, optional): The placeholder text to display when the textbox is empty. Defaults to none. …

Facebook社群对于个人和品牌的价值探讨

Facebook社群作为连接兴趣和人群的重要平台,不仅为个人提供了交流互动的空间,也成为品牌建立和发展的重要途径。本文将深入探讨Facebook社群在个人和品牌发展中的多重价值,以及如何有效利用这些社群来实现个人和品牌的目标。 1. 社群对个人的…

如何在 ArcGIS Pro 中加载古地图

我们在《魏蜀吴三国分布示意图》一文中,为你分享三国时期的分布示意图。 现在再为你分享一个在线古地图,以及如何在ArcGIS Pro中加载在线古地图的方法。 如何加载在线古地图 打开ArcGIS Pro,在菜单栏上点击插入,选择“连接\服务…

在linux系统centos上面安装php7gmp扩展

ps:在ubuntu上面安装gmp(最简单) $ sudo apt-get install php7.0-gmp然后再php.ini添加extensionphp_gmp.so <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<…

【车载开发系列】PWM与占空比

【车载开发系列】PWM与占空比 一. 基本概念 1&#xff09;PWM PWM全称Pulse Width Modulation&#xff1a;脉冲宽度调制&#xff08;简称脉宽调制&#xff0c;通俗的讲就是调节脉冲的宽度&#xff09;&#xff0c;是电子电力应用中非常重要的一种控制技术。 脉冲宽度调制&am…

hitcontraining_uaf

BUUCTF[PWN][堆] 题目&#xff1a;BUUCTF在线评测 (buuoj.cn) 程序del是没有将申请的指针清零&#xff0c;导致可以再次调用输出print。 查看add_note函数&#xff1a;根据当前 notelist 是否为空&#xff0c;来申请了一个8字节的空间将地址(指针)放在notelist[i]中&#xff…

Spring源码十一:事件驱动

上一篇Spring源码十&#xff1a;BeanPostProcess中&#xff0c;我们介绍了BeanPostProcessor是Spring框架提供的一个强大工具&#xff0c;它允许我们开发者在Bean的生命周期中的特定点进行自定义操作。通过实现BeanPostProcessor接口&#xff0c;开发者可以插入自己的逻辑&…

一文带你了解“商贸物流大脑”

商贸物流大脑源于实体物流&#xff0c;物理世界的实体物流是构建商贸物流大脑的基础。商贸物流大脑应该是物理世界的实际物流系统和相应的虚拟物流系统两个层面血肉相连、相互作用、有机统一的整体。商贸物流的研究内容包括数字产业化和物流数字化两大部分。信息产业化是进入物…

政务单位网站SSL证书选择策略

在数字化快速发展的今天&#xff0c;政务单位网站作为政府与公众沟通的重要桥梁&#xff0c;其安全性和可信度显得尤为重要。SSL证书作为保障网站安全的重要手段&#xff0c;其选择对于政务单位网站来说至关重要。本文将探讨政务单位网站在选择SSL证书时应该考虑的因素&#xf…

STM32入门笔记(03): ADC低通滤波(IIR)(SPL库函数版)(2)

A/D转换的常用技术有逐次逼近式、双积分式、并行式和跟踪比较式等。目前用的较多的是前3种。 A/D转换器的主要技术指标 转换时间 分辨率 例如&#xff0c;8位A/D转换器的数字输出量的变化范围为0&#xff5e;255&#xff0c;当输入电压的满刻度为5V时&#xff0c;数字量每变化…

PLM系统:PLM系统如何重塑产品生命周期管理

PLM系统&#xff1a;重塑产品生命周期管理的未来 在当今快速变化的商业环境中&#xff0c;产品生命周期管理&#xff08;PLM&#xff09;系统正逐渐成为企业提升竞争力、加速创新并优化运营流程的关键工具。随着技术的不断进步和市场需求的日益复杂化&#xff0c;传统的手动或…

直播预告 | VMware大规模迁移实战,HyperMotion助力业务高效迁移

2006年核高基专项启动&#xff0c;2022年国家79号文件要求2027年央国企100%完成信创改造……国家一系列信创改造政策的推动&#xff0c;让服务器虚拟化软件巨头VMware在中国的市场份额迅速缩水。 加之VMware永久授权的取消和部分软件组件销售策略的变更&#xff0c;导致VMware…

昇思25天学习打卡营第16天|文本解码原理——以MindNLP为例

在大模型中&#xff0c;文本解码通常是指在自然语言处理&#xff08;NLP&#xff09;任务中使用的大型神经网络模型&#xff08;如Transformer架构的模型&#xff09;将编码后的文本数据转换回可读的原始文本的过程。这些模型在处理自然语言时&#xff0c;首先将输入文本&#…

长沙(市场调研公司)源点 企业如何决定是否需要开展市场调研?

长沙源点调研咨询认为&#xff1a;对于一个特定问题&#xff0c;管理者在面临几种解决问题的方案时&#xff0c;不应该凭直觉草率开展应用性市场调研。事实上&#xff0c;首先需要做的决策是是否需要开展调研。在下述情况下&#xff0c;最好不要做调研&#xff1a; *缺乏资源。…

重大更新来袭!!《植物大战僵尸杂交版V2.1+修改器+融合版》

大家好&#xff01;每个软件更新总是令人兴奋不已。前段时间介绍的《植物大战僵尸》系列以其独特的策略玩法和丰富的植物角色&#xff0c;赢得了很多玩家的喜爱。而在今天&#xff0c;这款经典游戏全网最新版本——《植物大战僵尸&#xff1a;杂交版V2.1》正式推出&#xff0c;…