先更库还是先删缓存?数据库与 Redis 双写一致性全对比
先更库还是先删缓存数据库与 Redis 双写一致性全对比这个问题几乎每个后端都踩过坑。答案看似简单实则藏着极端场景下的致命 bug。核心矛盾为什么需要双写因为数据库和 Redis 的角色不同角色职责MySQL最终数据源保证持久化和事务Redis热点缓存加速查询读多写少时数据同步路径是写 DB → 删/更缓存 → 下次读命中缓存。问题就出在这个箭头上顺序反了数据就脏了。方案一先更库后删缓存主流推荐 ✅这是大多数公司的默认选择。流程① 更新 MySQL ② 删除 Redis 缓存 ③ 下次读 → 缓存未命中 → 回源查 DB → 写入缓存为什么推荐因为删缓存比更新缓存安全。删缓存最坏结果是缓存短暂不存在读请求回源一次数据最终一致更新缓存如果更新失败缓存里存的是旧数据用户永远拿不到新值但有一个致命场景延时双删都救不了时间线 T1: 线程A 更新 DB新值 100 T2: 线程B 读缓存 → 命中旧值值 50 T3: 线程A 删缓存 T4: 线程B 旧值已读走返回 50 ❌问题本质更新 DB 和删缓存之间存在时间差这段窗口内旧读请求可能恰好命中缓存。这不是概率问题高并发下一定会发生。怎么解决三种手段手段原理效果延时双删更新 DB 后延迟 N ms 再删一次缓存兜底但 N 难设定串行化同一 key 的读写加分布式锁强一致但牺牲性能消息队列更新 DB 后发 MQ异步确保删缓存解耦但引入最终一致性其中消息队列方案是大厂最常用的更新 DB → 写 Binlog → Canal 订阅 → 发送 MQ → 消费删缓存Canal 把删缓存这个动作从业务代码中剥离即使删失败MQ 会重试保证最终一定删掉。方案二先删缓存后更库绝对不推荐 ❌流程① 删除 Redis 缓存 ② 更新 MySQL ③ 下次读 → 缓存未命中 → 回源查 DB → 写入缓存新值看起来也能保证最终一致看这个场景时间线 T1: 线程A 删缓存 T2: 线程B 读缓存 → 未命中 → 查 DB此时 DB 还是旧值 T3: 线程B 把旧值写入缓存 T4: 线程A 更新 DB新值 100 结果缓存 旧值DB 新值数据永久不一致 ❌❌❌这个 bug 比方案一严重得多对比项先更库后删缓存先删缓存后更库脏数据持续时间短暂下一次读就修复永久直到缓存过期或手动清理发生概率高并发下必现较低但一旦发生就是脏数据修复成本自动修复需要人工介入或等待过期先删缓存的最大风险是在 DB 更新完成前旧值已经被写回缓存了。一旦发生缓存里的旧值会一直存在直到 TTL 过期。如果 TTL 设得很长比如 1 小时这 1 小时内所有读请求都拿到脏数据。两种方案终极对比维度先更库后删缓存 ✅先删缓存后更库 ❌脏数据窗口极短μs~ms 级可能很长直到 TTL 过期脏数据能否自愈✅ 能下次读自动修复❌ 不能旧值已写入缓存实现复杂度中等需处理延时双删或 MQ简单但风险极高大厂实践✅ 主流方案❌ 基本不用推荐指数⭐⭐⭐⭐⭐⭐真正的最优解不要自己写双写逻辑最高效的做法是让基础设施替你完成方案工具原理Binlog 异步删除Canal MQ监听 DB 变更异步删缓存失败重试订阅 Binlog 直写Otter / Maxwell变更直接同步到 Redis不经过业务代码缓存中间件JetCache / Cache Aside 框架封装双写逻辑内置重试和补偿核心思想一致把删缓存从业务主流程中剥离用异步 重试保证最终一致性。一句话总结先更库后删缓存。不是因为它完美而是因为它的最坏情况只是短暂不一致而反过来的最坏情况是永久脏数据。能用 MQ 异步删就别在主链路上同步删。能让 Canal 干的活就别让业务代码扛。双写一致性的本质不是选顺序而是承认一定会不一致然后设计一个能自愈的机制。

相关新闻

为什么研发型企业更需要场景化AI智能体

为什么研发型企业更需要场景化AI智能体

一、引言在制造与研发领域,数据分散是长期存在的“隐形负债”。设计图纸在PDM系统里,物料清单(BOM)在ERP中,订单流转在MES上,质量数据则可能散落在Excel或邮件附件里。这些数据互不相通,研发人员…

2026/6/22 23:50:37阅读更多 →
为什么大家都用 MyBatis,我写完第一个 JDBC 项目之后懂了

为什么大家都用 MyBatis,我写完第一个 JDBC 项目之后懂了

学 Java 持久层的时候,我先写了一个纯 JDBC 的小项目。写完之后只有一个感受:太累了。 后来换了 MyBatis 重写一遍,同样的功能,代码量直接砍了一半多。这篇就记一下 MyBatis 到底比 JDBC 好在哪,都是我自己踩过的坑。 …

2026/6/22 23:50:36阅读更多 →
粒子生命模拟:用简单规则创造复杂世界的奇妙之旅

粒子生命模拟:用简单规则创造复杂世界的奇妙之旅

粒子生命模拟:用简单规则创造复杂世界的奇妙之旅 【免费下载链接】particle-life A simple program to simulate artificial life using attraction/reuplsion forces between many particles 项目地址: https://gitcode.com/gh_mirrors/pa/particle-life 你…

2026/6/22 23:45:32阅读更多 →
树莓派打造便携式Kali Linux渗透测试工作站:硬件选型、系统优化与实战指南

树莓派打造便携式Kali Linux渗透测试工作站:硬件选型、系统优化与实战指南

1. 项目概述:为什么需要一个便携式黑客工作站?在网络安全、渗透测试乃至日常的IT运维工作中,我们常常面临一个矛盾:一方面,我们需要一个功能强大、工具齐全的环境来执行各种扫描、分析和测试任务;另一方面&…

2026/6/23 1:01:09阅读更多 →
飞思卡尔DSP56724/56725 EMC寄存器配置实战:从原理到音频处理应用

飞思卡尔DSP56724/56725 EMC寄存器配置实战:从原理到音频处理应用

1. 项目概述与EMC核心价值在嵌入式系统,尤其是像飞思卡尔(现恩智浦)Symphony DSP56724/56725这类面向专业音频处理的多核DSP设计中,外部存储器控制器(External Memory Controller, EMC)扮演着“交通总指挥”…

2026/6/23 1:01:09阅读更多 →
DSP56724/56725 DMA与时钟配置实战:音频处理系统性能优化指南

DSP56724/56725 DMA与时钟配置实战:音频处理系统性能优化指南

1. 项目概述:DSP56724/56725的DMA与时钟配置核心在嵌入式音频处理器的世界里,飞思卡尔(现为NXP)的Symphony DSP56724和DSP56725是两颗常被用于高性能、多通道音频处理应用的明星芯片。如果你正在开发基于这两款处理器的音频系统&a…

2026/6/23 1:01:09阅读更多 →
如何在5分钟内免费安装VideoDownloadHelper:浏览器视频下载插件完整指南

如何在5分钟内免费安装VideoDownloadHelper:浏览器视频下载插件完整指南

如何在5分钟内免费安装VideoDownloadHelper:浏览器视频下载插件完整指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 还在为无…

2026/6/23 1:01:09阅读更多 →
3分钟掌握跨平台音频实时共享的终极方案

3分钟掌握跨平台音频实时共享的终极方案

3分钟掌握跨平台音频实时共享的终极方案 【免费下载链接】AudioShare 将Windows的音频在其他Android设备上实时播放。Share windows audio 项目地址: https://gitcode.com/gh_mirrors/audi/AudioShare 你是否曾经希望将电脑上播放的电影音频同步到手机,或者把…

2026/6/23 1:01:09阅读更多 →
HC(S)08嵌入式开发中__near与__far关键字的内存管理实战

HC(S)08嵌入式开发中__near与__far关键字的内存管理实战

1. 项目概述与核心挑战在HC(S)08这类8位/16位微控制器的嵌入式开发里,内存管理从来都不是一个可以“自动挡”解决的问题。芯片的物理内存空间有限,寻址方式多样,尤其是当你的程序代码量开始膨胀,超出了CPU的直接寻址范围时&#x…

2026/6/23 0:56:08阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/22 6:01:42阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/22 1:15:34阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/22 5:42:46阅读更多 →
2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南

2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南

2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南。OpenClaw是开源的个人AI助手,Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流…

2026/6/23 0:00:38阅读更多 →
2026年北京电子沙盘制作公司深度评测:从技术选型到落地效果,谁在真正定义“数字+实体”的融合边界?

2026年北京电子沙盘制作公司深度评测:从技术选型到落地效果,谁在真正定义“数字+实体”的融合边界?

模块一:行业背景——百亿赛道爆发,北京市场的特殊性与选型困局2026年,电子沙盘行业已走过“要不要做”的讨论,进入“找谁做、怎么做”的深水区。据行业研究机构数据,2025年国内电子沙盘市场规模已突破85亿元&#xff0…

2026/6/23 0:00:38阅读更多 →
音视频场景下的 Java 开发者面试:技术与挑战

音视频场景下的 Java 开发者面试:技术与挑战

面试互联网大厂:从音视频场景看 Java 开发者的技能与挑战 在互联网大厂求职的面试中,Java 开发者往往需要面对严苛的技术问题。今天,我们将通过一位名叫燕双非的搞笑程序员与严肃的面试官之间的对话,看看在音视频场景下&#xff0…

2026/6/23 0:00:38阅读更多 →