redis和mysql之间的数据一致性

news/2025/10/19 5:08:03/文章来源:https://www.cnblogs.com/cabbagehp/p/19148783

解决双写一致性问题的主要策略

1、旁路缓存模式(Cache Aside Pattern)

在这个模式中,我们一般都是先更新数据库再删除旧缓存。
首先,为什么我们不选择先删除缓存再更新数据库,因为这样会导致在并发的情况下,假如A线程先删除了缓存,但是由于并发的情况,B线程在缓存中未读取数据,在数据库中读取数据之后,写入缓存之中,然后A数据写入数据库。那么此时缓存和数据库之间不一致,这比先更新数据库再删除旧缓存的结果坏的多。

2、解决双写一致性问题的三种方案

2.1 延时双删策略

延迟双删策略主要用于解决在高并发的场景下,由于网络延迟、并发控制等原因造成的数据库和缓存不一致的问题。
但是由于网络延迟或其他不确定性因素,删除缓存与数据库更新之间可能存在时间窗口,导致在这段时间内的读请求从数据库读取数据后写回缓存,新写入的缓存数据可能还未反映出数据库的最新变更。所以为了解决这个问题,延时双删策略在第一次删除缓存后,设定一段短暂的延迟时间,如几百毫秒,然后在这段延迟时间结束后再次尝试删除缓存。这样做的目的是确保在数据库更新传播到所有节点,并且在缓存中的旧数据彻底过期失效之前,第二次删除操作可以消除缓存中可能存在的旧数据,从而提高数据一致性。

2.2 删除缓存重试机制

删除缓存重试机制是指在删除缓存操作失败时,设定一个重试策略,确保缓存最终能被正确的删除,以维持与数据库的一致性。
在执行数据库更新操作之后,尝试删除关联的缓存项,如果首次删除缓存失败(例如网络波动、缓存服务暂时不可用等情况),系统进入重试逻辑,按照预先设定的策略(如指数退避、固定间隔重试等)进行多次尝试。直到缓存删除成功,或者达到最大重试次数为止。通过这种方式,即使在异常情况下也能尽量保证缓存与数据库的一致性。

监听并读取biglog异步删除缓存

在数据库发生写操作时,将变更记录在binlog或类似的事务日志中,然后使用一个专门的异步服务或者监听器订阅binlog的变化(比如Canal),一旦检测到有数据更新,便根据binlog中的操作信息定位到受影响的缓存项。讲这些需要更新缓存的数据发送到消息队列,消费者处理消息队列中的事件,异步地删除或更新缓存中的对应数据,确保缓存与数据库保持一致。在
这里面,我们需要注意几个问题,首先就是消息的顺序性,对于这个,我们可以使用一些具有顺序性的消息队列,例如kafka,其次是幂等性。同时在异步处理binlog中,务必考虑一下异常的处理机制和重试策略,确保binlog事件能够正确的处理并执行缓存更新操作。

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

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

相关文章

ubuntu允许root登录桌面系统

1.设置root密码 sudo passwd root2.解锁root sudo passwd -u root 3.允许root登录 sudo nano /etc/gdm3/custom.conf# [Security] 下添加一下行AllowRoot=truesudo nano /etc/pam.d/gdm-password#注释或删掉以下行au…

申威(sw_64)架构下如何安装java-1.8.0-swjdk的rpm包?​

申威(sw_64)架构下如何安装java-1.8.0-swjdk的rpm包?​​ 专门为申威(sw_64)架构的电脑打造的Java 8运行环境。 ​1. 下载文件​ 安装包下载:https://pan.quark.cn/s/936281541bdf ,确保你已经下载了 java-1.8.…

AI协科学家:技术革命还是安全噩梦?

本期节目深入探讨AI协科学家如何推动科学突破,分析基于智能体架构中的安全黑洞问题,讨论人类是否准备好让AI处理所有日常任务,并揭示相关技术风险与挑战。在《两个漏洞之间》的这期特别节目中,我们紧接着上个月的内…

一个决定

一个决定在家毛了好几天了,一个原因是下雨,一个原因是家里有大显示器。 但是家里的效率奇差。 自己做饭,一日三餐得刷碗,然后吃饭得时候刷剧,吃完饭了,还很难抽离出来。 今天好了,炒白菜得时候加了两勺我妈今年…

详细介绍:k8s部署前后分离架构微服务——跨域和缓存问题

详细介绍:k8s部署前后分离架构微服务——跨域和缓存问题pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas…

npm镜像配置

npm全称Node Package Manager,是node.js的模块依赖管理工具。由于npm的源在国外,所以国内用户使用起来各种不方便。下面整理出了一部分国内优秀的npm镜像资源,国内用户可以选择使用。 国内优秀npm镜像淘宝npm镜像搜…

一些特性

原始字符串(Raw String Literals) C++ 11特性 一种所见即所得的东西,可以完美返回你想要的字符串,包括换行等等 大体长这样 R"()"使用方式如 string k = R"(asdfasd sd gf a)"; cout <<…

实用指南:计算机毕设java基于mybatis的医用器械管理系统 基于 SSM+JavaWeb 的医用器械全流程管理平台 Java+MySQL 的医疗物资一体化系统

实用指南:计算机毕设java基于mybatis的医用器械管理系统 基于 SSM+JavaWeb 的医用器械全流程管理平台 Java+MySQL 的医疗物资一体化系统2025-10-17 20:04 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: …

计算机视觉技术与应用深度解析

本文详细介绍了计算机视觉技术在电商推荐、无人机导航、广告生成等领域的实际应用,探讨了视觉语言模型的架构设计与抗幻觉技术,并分析了云端AI服务的三层技术栈构建原理。计算机视觉技术与应用深度解析 在今年的计算…

央链知播受权发布:图说《“可信资产 IPO + 数链金融 RWA” 链改 2.0 六方共识》 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

AGC 板刷记录1

准备板刷 \(\text{agc}\),顺便写一个做题记录 [AGC072A] Rhythm Game 感觉水黑吧,洛谷恶评。 一眼就能看出不是贪心就是 \(\text{dp}\),发现其实两者兼有,首先把这个题转化成:有若干个任务,第 \(i\) 个任务在 \(…

2025.10.17总结

心理咨询完成聊天室功能,有点小bug,但是整体上功能已经较为完善了,修修改改后去进行心理视频学习,或心理测评模块的开发

记Windows 11环境Rust下载安装配置流程

记Windows 11环境Rust下载安装配置流程 一、Rustup下载按我的理解,这个工具类似于Steam,Rust则是你要安装的游戏,你可以在这个下载器命令行界面进行对Rust的镜像源、安装位置配置。在Rust官网链接下载Rustup下载器。…

K8s学习笔记(九) job与cronjob - 教程

K8s学习笔记(九) job与cronjob - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mona…

[HZOI]CSP-S模拟33

挂分场CSP-S模拟33今天是挂分场,总计挂分 132 tps。。。T1:Divisors 大简单题。 这里粘一个结论,然后直接暴力做就行了。 结论 $ [1,1e5] 内 因子个数max = 128 (83160) $ $ [1,1e6] 内 因子个数max = 240 (720720)…

[PaperReading] VLM2Vec-V2: Advancing Multimodal Embedding for Videos, Images, and Visual Documents

目录VLM2Vec-V2: Advancing Multimodal Embedding for Videos, Images, and Visual DocumentsTL;DRMethodQ:VLM2Vec-V2与原始VLM2Vec算法有什么区别?BenchmarkQ&AQ:CLS, QA, RET, GD, Overall这些指标是什么含义…

通用UI界面设计

首先需要找到你要复制的界面 ,分别复制.cs文件 , .Designer.cs文件 ,.resx文件 将其复制到你所需要的位置复制完之后 ,复制下其当前的一个路径 ,等下有用 这个时候你返回VS2022里面是看不到的 ,这个时候刚复制的…

ffmpeg使用

用MP4中制作M3U8: ffmpeg -i myVideo.mp4 -c copy -bsf h264_mp4toannexb output.ts ffmpeg -i output.ts -c copy -map 0 -f segment -segment_list playlist.m3u8 -segment_time 5 output%03d.ts 从M3U8转回MP4: ffm…

2025.10.17总结 - A

今天没课,下雨了,一直在宿舍了,挺爽的