From e396ef8dc7669216a550b6d155396cf8587aa975 Mon Sep 17 00:00:00 2001 From: meowrain Date: Fri, 12 Sep 2025 23:19:00 +0800 Subject: [PATCH] xxx --- public/api/i/2025/09/12/12boul3-1.webp | Bin 0 -> 121422 bytes .../{ => 中间件/MySQL}/搭建MySQL主从服务器.md | 0 .../posts/中间件/Redis/RedisString底层.md | 17 + .../Redis/Redis缓存击穿缓存穿透缓存雪崩.md | 32 + .../中间件/Redis/缓存与数据库一致性问题.md | 636 ++++++++++++++++++ 5 files changed, 685 insertions(+) create mode 100644 public/api/i/2025/09/12/12boul3-1.webp rename src/content/posts/{ => 中间件/MySQL}/搭建MySQL主从服务器.md (100%) create mode 100644 src/content/posts/中间件/Redis/RedisString底层.md create mode 100644 src/content/posts/中间件/Redis/Redis缓存击穿缓存穿透缓存雪崩.md create mode 100644 src/content/posts/中间件/Redis/缓存与数据库一致性问题.md diff --git a/public/api/i/2025/09/12/12boul3-1.webp b/public/api/i/2025/09/12/12boul3-1.webp new file mode 100644 index 0000000000000000000000000000000000000000..9d0dd1ce3a9b7be6e90c3293876c7817138eb9c2 GIT binary patch literal 121422 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λ86(=sDmR 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 literal 0 HcmV?d00001 diff --git a/src/content/posts/搭建MySQL主从服务器.md b/src/content/posts/中间件/MySQL/搭建MySQL主从服务器.md similarity index 100% rename from src/content/posts/搭建MySQL主从服务器.md rename to src/content/posts/中间件/MySQL/搭建MySQL主从服务器.md diff --git a/src/content/posts/中间件/Redis/RedisString底层.md b/src/content/posts/中间件/Redis/RedisString底层.md new file mode 100644 index 0000000..26199ee --- /dev/null +++ b/src/content/posts/中间件/Redis/RedisString底层.md @@ -0,0 +1,17 @@ +--- +title: RedisString底层 +published: 2025-09-12 +description: ' RedisString底层 ' +image: '' +tags: ['Redis', '中间件','RedisString底层'] +category: '中间件 > Redis' +draft: false +lang: '' +--- + +# RedisString底层 + +RedisString底层是使用SDS(Simple Dynamic String)实现的,SDS是一个动态字符串,可以动态扩容。 + + +![](https://blog.meowrain.cn/api/i/2025/09/12/12boul3-1.webp) \ No newline at end of file diff --git a/src/content/posts/中间件/Redis/Redis缓存击穿缓存穿透缓存雪崩.md b/src/content/posts/中间件/Redis/Redis缓存击穿缓存穿透缓存雪崩.md new file mode 100644 index 0000000..3ed83f6 --- /dev/null +++ b/src/content/posts/中间件/Redis/Redis缓存击穿缓存穿透缓存雪崩.md @@ -0,0 +1,32 @@ +--- +title: Redis缓存击穿缓存穿透缓存雪崩 +published: 2025-09-12 +description: '' +image: '' +tags: ['Redis', '中间件','缓存击穿'] +category: '中间件 > Redis' +draft: false +lang: '' +--- + +# 缓存击穿 +缓存击穿说的是,某个热点数据在缓存中失效,导致大量请求打到数据库。这时候由于瞬间的高并发,可能导致数据库崩溃。 +## 解决方案 +- 分布式锁: 在获取缓存的时候,使用分布式锁,保证只有一个请求获取到缓存。这样的话,就不会因为热点数据过期失效,而让请求都打到数据库里了。 +- 热点数据永不过期 + +# 缓存穿透 +缓存穿透说的是,某个热点数据在缓存中不存在,导致大量请求打到数据库。这时候由于瞬间的高并发,可能导致数据库崩溃。 + +## 解决方案 +- 使用布隆过滤器,布隆过滤器对于不存在的数据是能100%判断的,所以用布隆过滤器能过滤掉不存在的请求。 +- 对查询的空结果进行缓存,第二次访问直接返回空值。 + +# 缓存雪崩 + +多个缓存数据在同一时刻过期,导致大量请求同时访问数据库,导致数据库崩溃。 + +## 解决方案 +- 采用随机时间过期策略,避免多个数据同时过期。 +- 使用双缓存策略,把数据存储在两层缓存里面,减少数据库的直接请求。 + diff --git a/src/content/posts/中间件/Redis/缓存与数据库一致性问题.md b/src/content/posts/中间件/Redis/缓存与数据库一致性问题.md new file mode 100644 index 0000000..418f849 --- /dev/null +++ b/src/content/posts/中间件/Redis/缓存与数据库一致性问题.md @@ -0,0 +1,636 @@ +--- +title: 缓存与数据库一致性问题 +published: 2025-09-12 +description: '' +image: '' +tags: ['Redis', '中间件','缓存与数据库一致性'] +category: '中间件 > Redis' +draft: false +lang: '' +--- +# 缓存与数据库一致性 + +缓存和数据库一致性是说在使用缓存的情况下,保证缓存中的数据和数据库中数据一致的问题。 + +**“先写缓存再写数据库”、“先写数据库再写缓存”、“先删除缓存再写数据库”这三种策略确实存在较大的数据不一致风险,因此通常不建议直接使用**,特别是在高并发、分布式系统中。 + + + +# 问题 + +## 先写缓存再写数据库 + +- **策略:先写缓存 (Redis),再写数据库 (MySQL)** + + **图示场景:** 有两个写请求 A 和 B,同时尝试更新票务余票。初始余票是 17,经过两个用户的扣减,**期望**最终余票是 15。 + + **并发执行时序 (按图中箭头顺序):** + + 1. 写请求 A: + + 更新 Redis 缓存 + + ,将余票设为 16。 + + - 此时 Redis: 16,MySQL: 17 + + 2. 写请求 B: + + 更新 Redis 缓存 + + ,将余票设为 15。 + + - 此时 Redis: 15,MySQL: 17 (请求 B 覆盖了请求 A 在 Redis 里的值) + + 3. 写请求 B: + + 更新 MySQL 数据库 + + ,将余票设为 15。 + + - 此时 Redis: 15,MySQL: 15 (到这里,Redis 和 MySQL 暂时一致) + + 4. 写请求 A: + + 更新 MySQL 数据库 + + ,将余票设为 16。 + + - 此时 Redis: 15,MySQL: 16 (请求 A 的数据库更新发生在 B 之后,覆盖了 B 在数据库里的值) + +## 先写数据库再写缓存 + +**策略:先写数据库 (MySQL),再写缓存 (Redis)** + +**图示场景:** 同样是两个写请求 A 和 B,尝试更新余票,初始 17,期望最终是 15。 + +**并发执行时序 (按图中箭头顺序):** + +1. 写请求 A: + + 更新 MySQL 数据库 + + ,将余票设为 16。 + + - 此时 Redis: 17 (假设初始),MySQL: 16 + +2. 写请求 B: + + 更新 MySQL 数据库 + + ,将余票设为 15。 + + - 此时 Redis: 17,MySQL: 15 (数据库被 B 更新为最终期望值) + +3. 写请求 B: + + 更新 Redis 缓存 + + ,将余票设为 15。 + + - 此时 Redis: 15,MySQL: 15 (暂时一致,且是正确期望值) + +4. 写请求 A: + + 更新 Redis 缓存 + + ,将余票设为 16。 + + - 此时 Redis: 16,MySQL: 15 (请求 A 的缓存更新发生在 B 的缓存更新之后,覆盖了 B 在缓存里的值) + +**最终结果:** + +- Redis 缓存中的余票是 **16**。 +- MySQL 数据库中的余票是 **15**。 + +## 先删除缓存,再写数据库 + +**策略:先删除缓存 (Redis),再写数据库 (MySQL)** + +**图示场景:** 这次涉及一个写请求和一个读请求并发执行。初始时,假设 Redis 和 MySQL 中的余票都是 16。写请求想将余票更新为 15。 + +**并发执行时序 (按图中箭头顺序):** + +1. 写请求: + + 删除 Redis 缓存 + + ,删除车站余票的 key (假定初始值是 16,所以图中箭头描述为“删除车站余票缓存 16”,但这只表示删的是这个key对应的旧数据)。 + + - 此时 Redis: 空,MySQL: 16 + +2. 读请求: + + 在写请求 + + 还未来得及更新数据库之前 + + ,并发地发起 + + 读操作 + + 。读请求先 + + 查询缓存 + + ,发现 + + 缓存为空 + + 。 + + - 此时 Redis: 空,MySQL: 16 + +3. 读请求: + + 缓存未命中,读请求转向 + + 查询 MySQL 数据库 + + 。此时写请求尚未完成数据库更新,所以从数据库中读到的是 + + 旧数据 16 + + 。 + + - 此时 Redis: 空,MySQL: 16,读请求获取到数据 16 + +4. 写请求: + + 更新 MySQL 数据库 + + ,将余票设为 15。 + + - 此时 Redis: 空,MySQL: 15 + +5. 读请求: + + 将从数据库读到的 + + 旧数据 16 回写到 Redis 缓存 + + 中。 + + - 此时 Redis: 16,MySQL: 15 + +**最终结果:** + +- Redis 缓存中的余票是 **16** (旧值)。 +- MySQL 数据库中的余票是 **15** (新值)。 + +# 解决方案 + +根据业务场景选择下面的缓存一致性方案: + +- **缓存双删**:如果公司现有消息队列中间件,可以考虑使用该方案,反之则不需要考虑。 +- **先写数据库再删缓存**:这种方案从实时性以及技术实现复杂度来说都比较不错,推荐大家使用这种方案。 +- **Binlog 异步更新缓存**:如果希望实现最终一致性以及数据多中心模式,该方案无疑是最合适的。 + +## 缓存双删 + + + +**先删除缓存 -> 写数据库 -> 延迟一段时间 -> 再次删除缓存** + +![img](https://blog.meowrain.cn/api/i/2025/05/20/qoh9qh-0.webp) + + + +![image-20250520164546344](https://blog.meowrain.cn/api/i/2025/05/20/r7ob3u-0.webp) + +## 先写入数据库,再删除缓存 + +**"先写 DB 再删除缓存"是一种常用的缓存一致性解决方案,也被称为“写回策略”或“Write-Through 策略”。** + +1. 当应用程序进行写操作时,首先将数据写入数据库。 +2. 然后,立即删除相应的缓存数据(或使缓存数据失效)。 +3. 当下一个读取请求到达时,会发现缓存中没有相应的数据,于是从数据库中读取最新的数据,并将其存储在缓存中。 + +这种策略的优势在于它保证了数据库和缓存之间的一致性。如果应用程序写入数据库并删除缓存,下一个读取操作将从数据库中获取最新数据,从而避免了数据不一致的情况。 + +![image-20250520164901899](https://blog.meowrain.cn/api/i/2025/05/20/r9sbzc-0.webp) + +当然,这种模型也不是完全没问题,如果说恰巧读缓存失效了,就会出现这种情况。 + +当缓存过期(可能是缓存正常过期也可能是 Redis 内存满了触发清理策略)条件满足,同时读请求的回写缓存 Redis 的执行周期在数据库删除之前,那么就有可能触发缓存数据库不一致问题。 + +上面说的两种情况,缺一不可,不过能同时满足这两种情况概率极低,低到可以忽略这种情况。 + +![img](https://blog.meowrain.cn/api/i/2025/05/20/rb7n2u-0.webp) + +这种模型会存在一个很小周期的缓存与数据库**不一致**的情况,不过对于绝大多数的情况来说,是可以容忍的。除去一些电商库存、列车余票等对数据比较敏感的情况,比较适合绝大多数业务场景。 + +# AI问答,一些思考 + +# 数据库缓存方案:先删后写与双删 + +[(99 封私信 / 80 条消息) 『延迟双删』和『先修改数据库,再删除缓存』哪个方案更好? - 知乎](https://www.zhihu.com/question/556172201) + + + +### 🧑‍💻 User + +所以先写数据库,再删缓存 +和缓存双删 +都是企业中正常使用的方案? + +--- + +### 🤖 Assistant + +
+ 已深度思考
+ 好的,用户现在在问关于数据库和缓存操作的两种常见方案:“先写数据库,再删缓存”和“缓存双删”是否都是企业中正常使用的方案。我需要先解释这两种方案,然后说明它们的适用场景和企业中的实际使用情况。

首先,我需要回忆一下这两种策略的基本概念。先写数据库再删缓存,是指在更新数据时,先更新数据库,然后删除缓存中的旧值,这样下次读取时会从数据库重新加载最新数据到缓存。而缓存双删,是在更新数据库前后各删除一次缓存,防止在更新过程中有并发读请求导致缓存脏数据。

接下来,我需要解释为什么企业会使用这些方案。先写数据库再删缓存是比较常见的策略,因为它简单且在大多数情况下有效,尤其是在并发不高的场景。但可能存在的问题是,如果在删除缓存之前有读请求,会读取到旧的缓存值,不过这种情况概率较低,因为数据库更新通常比缓存操作快。

然后是缓存双删,这是为了解决先写后删可能存在的并发问题。比如,当更新数据库时,有一个读请求在数据库更新之后但缓存删除之前读取,这时候会从数据库拿到新数据,但可能在缓存删除前另一个写操作导致数据不一致。双删策略通过在更新前删一次,更新后等一段时间再删一次,来减少这种情况的发生。不过需要注意等待时间的设置,这取决于数据库的主从同步时间或其他延迟。

接下来要说明企业中是否正常使用。实际上,这两种方案都是常见的,但适用场景不同。先写后删更简单,适用于大部分场景;双删则在高并发或对一致性要求较高的场景中使用。同时,可能还要提到其他方案,比如写缓存(更新缓存而不是删除),但这种方式可能有一致性问题,需要结合其他机制。

最后,需要总结这两种方案都是企业常用的,但需要根据具体场景选择,并可能结合其他优化措施,比如延迟双删中的等待时间,或者使用消息队列来确保缓存删除成功。

现在需要按照用户要求的格式来组织回答:标题带emoji,解释部分要详细但易懂,可能用例子或类比,最后一个问题。

标题可能用“数据库与缓存更新策略:先写后删 vs 双删 🗄️🔄”这样的。

解释部分需要分点说明两种策略,它们的流程、优缺点、适用场景,以及企业中的实际应用情况。可能用一个例子,比如用户修改个人信息,先更新数据库再删缓存,或者双删的情况。

最后,问用户是否想了解更多细节,比如具体实现或其他缓存策略。
+
+ + + +数据库与缓存更新策略:先写后删 vs 双删 🗄️🔄 + +在企业级系统中,数据库(持久化存储)和缓存(高速临时存储)的协同工作是性能优化的核心。为了保证数据一致性(数据库和缓存中的数据同步),常见的两种策略是“先写数据库,再删缓存”和“缓存双删”,它们都是企业中**根据场景灵活选用**的方案,我们逐一拆解: + + +### 1. 先写数据库,再删缓存:最基础的“保守派” + +**流程**:当需要更新数据时,先完成数据库的写操作(确保持久化存储是最新的),然后删除缓存中对应的旧值。下次读取时,由于缓存缺失,系统会从数据库读取最新数据并重新写入缓存(即“缓存击穿”后的自动填充)。 + +**为什么企业用它?** + +- **简单可靠**:逻辑清晰,只有两步操作(写库→删缓存),易于实现和维护。 +- **风险可控**:数据库是“数据源头”,优先保证数据库的正确性(即使缓存删除失败,最多缓存中暂时保留旧数据,下次读取会自动更新)。 + +**潜在问题**: +如果在“写数据库”和“删缓存”之间,有一个读请求到达,此时缓存中的旧数据还未被删除,读请求会拿到旧值。但这种情况发生概率较低(数据库写操作通常比缓存操作快,时间窗口短),因此在**并发量不高或对一致性要求不是极端严格**的场景(如用户信息、商品详情)中,企业普遍采用此方案。 + + +### 2. 缓存双删:高并发下的“增强版” + +**流程**:为了进一步降低“先写后删”中旧缓存被读取的概率,在更新数据库前后各删除一次缓存(故称“双删”): +① **先删缓存**:删除旧缓存(防止读请求拿到旧值); +② **写数据库**:更新数据库; +③ **延迟后再删缓存**:等待一段时间(比如1-5秒,具体取决于数据库主从同步或业务延迟),再次删除缓存(防止在写数据库期间,有新的读请求将旧数据重新写入缓存)。 + +**为什么企业用它?** + +- **提升一致性**:通过两次删除,大幅缩小“旧缓存被读取”的时间窗口,适用于**高并发场景**(如秒杀活动、高频更新的订单状态)。 +- **应对复杂延迟**:如果数据库是主从架构(写主库→同步到从库有延迟),或缓存写入存在异步操作,双删能更好地覆盖这些延迟带来的不一致风险。 + +**潜在问题**: +需要额外处理“延迟删除”的逻辑(比如用定时任务或消息队列实现),增加了系统复杂度;延迟时间过长可能影响性能,过短可能无法覆盖所有延迟场景,需要根据业务经验调优。 + + +### 企业实际使用场景总结 + +- **先写后删**:是“默认方案”,适用于大多数业务(如用户个人信息、商品基础属性),简单高效,满足90%以上场景的一致性需求。 +- **双删策略**:作为“增强方案”,用于高并发、强一致性要求的场景(如库存、交易订单),通过牺牲一定复杂度换取更高的数据一致性。 + + +你更想深入了解哪一种策略的具体实现细节?比如“先写后删”如何处理缓存删除失败,或“双删”中延迟时间如何计算? 😊 + +--- + +### 🧑‍💻 User + +问题是缓存双删,你删了缓存,在删除和写入之间有读请求,哪个请求还是会拿到旧数据啊,这时候还是会让缓存是旧数据,但是数据库里是新的(短暂的),当然最后缓存还是要被二次删除 + +--- + +### 🤖 Assistant + +
+ 已深度思考
+ 好的,用户现在在问缓存双删策略中的一个具体问题:在第一次删缓存之后,写数据库之前,如果有读请求进来,这时候读请求会从数据库读取旧数据并重新写入缓存,导致缓存里是旧数据,而数据库之后会被更新为新数据。这时候虽然最后会二次删除缓存,但中间可能存在短暂的不一致。我需要解释这个问题,并说明为什么双删策略仍然有效,或者如何处理这种情况。

首先,用户的问题核心是双删策略中的时间窗口问题,即在第一次删除缓存后,写数据库前,读请求可能重新填充旧数据到缓存。这时候需要分析这个时间窗口的长度,以及如何通过延迟二次删除来解决。

需要回顾双删的流程:第一次删缓存→写数据库→延迟后二次删缓存。用户提到的情况是在第一步删缓存后,写数据库前,有读请求,此时数据库还是旧数据(因为还没写),所以读请求会从数据库读旧数据,然后写入缓存。这时候缓存里是旧数据,之后数据库被更新为新数据,这时候缓存里的旧数据会存在,直到二次删除触发。

需要解释为什么这种情况的影响有限,或者如何通过调整延迟时间来覆盖这个窗口。比如,假设写数据库的时间是T1,读请求的时间是在T0(第一次删缓存后,写数据库前),那么读请求会把旧数据写入缓存,之后数据库在T1被更新。此时缓存中的旧数据会存在,直到二次删除在T1+延迟时间执行。这时候如果延迟时间足够长,覆盖了可能的读请求重新填充缓存的时间,那么二次删除就能清除这个旧缓存,下次读请求就会从数据库读取新数据。

另外,可能需要提到这种情况的概率较低,因为写数据库通常是一个相对较快的操作,时间窗口较短。或者企业中如何通过其他手段(如分布式锁、异步补偿)来进一步降低风险。

还要注意用户可能的深层需求:是否双删策略真的能解决一致性问题,或者是否有其他更优的方案。需要明确双删是权衡后的选择,并非完美,但在大多数高并发场景下足够用。

最后,保持解释清晰,用例子或时间线来帮助理解,然后以问题结束,引导用户进一步提问。
+
+ + + +缓存双删中的“旧数据回灌”问题:时间窗口与延迟删除的奥秘 🕒🔍 + +你观察得非常细致!缓存双删策略确实存在一个“短暂的时间窗口”,可能让旧数据暂时回到缓存中。我们通过具体时间线模拟这个过程,再分析为什么企业仍选择这种方案,以及如何降低风险: + + +### 场景模拟:双删中的“旧数据回灌” + +假设我们要更新一条用户的“账户余额”数据,流程如下(时间顺序): +1️⃣ **第一次删缓存**(T0时刻):删除缓存中旧的“账户余额”(假设旧值是100元)。 +2️⃣ **读请求插入旧数据**(T1时刻,T0 < T1 < T2):此时数据库还未更新(仍是旧值100元),一个读请求到达→缓存缺失→从数据库读取旧值100元→重新写入缓存(缓存现在是100元)。 +3️⃣ **写数据库**(T2时刻):数据库更新为新值200元(完成持久化)。 +4️⃣ **第二次删缓存**(T3时刻,T3 = T2 + 延迟时间):等待一段时间后,再次删除缓存(此时缓存中的100元被删除)。 + + +### 为什么这种“短暂不一致”可以接受? + +虽然T1到T3期间,缓存中是旧值(100元),数据库是新值(200元),但这种不一致的**持续时间极短**(仅T3 - T1),且企业通过以下方式降低影响: + +#### 1. 延迟时间的“精准控制” + +第二次删除的“延迟时间”(如1-5秒)是关键。它需要覆盖“数据库写操作的耗时 + 可能的读请求重新填充缓存的耗时”。例如: + +- 假设数据库写操作耗时0.5秒,读请求从数据库读数据+写缓存耗时0.3秒,那么延迟时间设为1秒即可覆盖T2到T3的窗口,确保在第二次删除时,缓存中可能存在的旧数据被清除。 + +#### 2. 高并发下的“概率稀释” + +在实际场景中,“读请求恰好出现在T0-T2窗口”的概率较低。因为: + +- 写数据库操作通常是同步的(如事务提交),耗时极短(毫秒级); +- 即使有读请求进入,它们大多是“分散”的,不会集中在这个微小的时间窗口内。 + +#### 3. 最终一致性的“兜底” + +即使出现短暂不一致,第二次删除后,下一次读请求会从数据库读取最新值(200元)并重新填充缓存,最终保证缓存与数据库一致。 + + +### 企业如何进一步优化? + +如果业务对一致性要求极高(如金融交易),企业可能会结合以下策略: + +- **分布式锁**:在写操作期间,对关键数据加锁,阻止读请求在T0-T2窗口内重新填充缓存(但会牺牲部分性能); +- **异步补偿**:通过日志监控缓存与数据库的差异,发现不一致时主动触发缓存更新; +- **缓存版本号**:为缓存添加版本标识(如时间戳),读请求填充缓存时检查版本,旧版本数据直接丢弃。 + + +总结来说,双删策略的“旧数据回灌”是理论上存在的,但通过合理设置延迟时间、结合其他优化手段,企业可以将其影响控制在可接受范围内。它本质上是“性能与一致性”的权衡——用微小的短暂不一致,换取高并发下的整体高效。 + + +关于双删策略,你还想了解哪些细节?比如“如何计算具体的延迟时间”或“分布式锁如何与双删配合使用”? 😊 + +--- + +### 🧑‍💻 User + +这不和先更新数据库,再删除缓存一样吗? + +--- + +### 🤖 Assistant + +
+ 已深度思考
+ 好的,用户现在的问题是:“这不和先更新数据库,再删除缓存一样吗?”需要解释缓存双删和先写数据库再删缓存的区别,以及为什么两者不同。首先,我需要回顾之前的对话,用户已经了解了这两种策略,现在可能混淆了它们的差异。

首先,用户的疑问是双删和先写后删是否一样。需要明确两者的核心区别在于操作顺序和步骤数量。先写后删是两步:写库→删缓存;双删是三步:删缓存→写库→延迟删缓存。

接下来,需要解释为什么双删不是简单的先写后删的重复。要指出时间窗口的不同,以及双删如何针对先写后删的缺陷进行优化。比如,先写后删的问题是在写库和删缓存之间可能有读请求拿到旧缓存,而双删通过提前删缓存和延迟再删来缩小这个窗口。

然后,用具体的时间线对比两种策略,说明在同样的读请求干扰下,两种策略的表现差异。比如,先写后删中,读请求可能在写库之后、删缓存之前到达,导致缓存保留旧值;而双删中,第一次删缓存后,读请求可能在写库前重新填充旧值,但第二次删缓存会清除它。

还要强调双删的“延迟”步骤的作用,以及为什么这额外的步骤能提升一致性,尽管仍有短暂窗口,但比先写后删更优。

最后,总结两者的适用场景,让用户明白它们不是一样的,而是针对不同并发和一致性需求的解决方案。

需要保持解释清晰,用例子和时间线帮助理解,避免术语过于复杂。同时,按照系统提示的格式,标题要有emoji,解释部分分点,最后问用户想深入的问题。
+
+ + + +缓存双删 vs 先写后删:步骤差异与一致性提升的本质区别 🧩🔄 + +你的观察很敏锐!两者确实都涉及“写数据库”和“删缓存”,但核心差异在于**操作顺序、步骤数量**和**对“读请求干扰”的防御机制**。我们通过具体场景对比,就能清晰看到它们的不同。 + + +### 先写数据库,再删缓存:“被动防御”的基础策略 + +**流程**:写数据库(T1)→ 删缓存(T2)。 +**时间线示例**(假设要更新用户余额为200元): + +- T0:数据库旧值100元,缓存旧值100元(初始状态)。 +- T1:写数据库完成(新值200元)。 +- T2:删除缓存(此时缓存被清空)。 +- **风险窗口**:若在T1到T2之间(写库后、删缓存前)有读请求: + 读请求发现缓存未删(仍为100元)→ 直接返回旧值(缓存旧值,数据库新值),导致不一致。 + + +### 缓存双删:“主动+延迟”的增强策略 + +**流程**:删缓存(T0)→ 写数据库(T1)→ 延迟后再删缓存(T2)。 +**时间线示例**(同样更新用户余额为200元): + +- T0:第一次删缓存(缓存旧值100元被删除,缓存为空)。 +- T1:写数据库完成(新值200元)。 +- **风险窗口**:若在T0到T1之间(删缓存后、写库前)有读请求: + 读请求发现缓存为空→ 从数据库读旧值100元→ 重新写入缓存(缓存现在是100元)。 +- T2(延迟后):第二次删缓存(清除此时可能存在的旧值100元)。 + + +### 关键差异:风险窗口的“位置”与“处理方式” + +| 策略 | 风险窗口位置 | 风险窗口内的读请求行为 | 最终一致性如何保证? | +| -------- | ------------------------- | -------------------------------------- | ------------------------------------ | +| 先写后删 | 写库后、删缓存前(T1-T2) | 读请求拿到缓存旧值(数据库已更新) | 下次读请求时缓存被删,重新加载新值 | +| 缓存双删 | 删缓存后、写库前(T0-T1) | 读请求重新写入缓存旧值(数据库未更新) | 第二次删缓存清除旧值,下次读加载新值 | + + +### 为什么双删不是“先写后删的重复”? + +1. **风险窗口更小**:写数据库通常比删缓存耗时(如事务提交可能需要毫秒级),而“先删缓存”让风险窗口出现在“写库前”(此时数据库还是旧值),读请求即使回灌旧值,数据库本身未更新,后续第二次删缓存后,下次读请求会从已更新的数据库加载新值。 +2. **主动防御延迟**:双删通过“延迟第二次删除”覆盖了数据库写操作的耗时,确保即使有读请求在写库前回灌旧值,最终也会被清除。而先写后删没有这一步,风险窗口内的读请求可能长期保留旧缓存(直到下次自然失效)。 + + +### 总结:两者是“互补”而非“相同” + +- 先写后删:简单、高效,适用于低并发或一致性要求不高的场景(风险窗口短,概率低)。 +- 缓存双删:通过“两次删除+延迟”主动缩小风险窗口,适用于高并发、一致性要求更高的场景(如库存、交易)。 + + +你更想了解哪种策略在具体代码中的实现细节?比如先写后删如何用代码处理“删缓存失败”,或双删的“延迟时间”如何用定时任务实现? 😊 + +--- + +### 🧑‍💻 User + +奥我懂了,双删时候,风险窗口期间,数据库未更新,其实是不算不一致的对吧,就算请求B取数据库并且更新缓存,那个值也是那个时刻的正确数值。 +但是我有个问题,后面更新数据库后,这时候缓存如果被之前的请求更新为旧的数据,这时候不就是不一致了吗?这期间进来的请求拿到的不就是旧的值了吗? + +--- + +### 🤖 Assistant + +
+ 已深度思考
+ 好的,用户现在的问题是关于缓存双删策略中的不一致情况。用户之前已经理解了双删的基本流程,现在进一步疑惑:当数据库更新后,如果缓存被之前的读请求填充了旧数据,这时候是否会导致不一致,以及后续请求是否会拿到旧值。

首先,我需要确认用户的问题核心:在双删的时间窗口中,读请求可能在数据库更新前读取旧数据并填充缓存,而当数据库更新后,这个缓存中的旧数据是否会导致不一致,以及如何解决。

接下来,我需要解释在数据库更新后,缓存中的旧数据确实会导致短暂的不一致,但双删的第二次删除会解决这个问题。需要详细说明时间线,让用户明确每个阶段的数据状态。

然后,用户可能想知道为什么这种不一致是短暂的,以及第二次删除的作用。需要强调延迟时间的重要性,确保在第二次删除时,旧数据被清除,后续请求会从数据库获取新值。

另外,用户可能隐含担心这种短暂不一致是否会影响业务,需要说明实际场景中这种情况的概率和持续时间都很低,以及企业如何通过优化手段(如调整延迟时间、监控)来进一步降低风险。

最后,保持回答的结构:标题、解释、总结问题,确保符合之前的格式要求,用易懂的语言和例子帮助用户理解。
+
+ + + +缓存双删中的“短暂不一致”与二次删除的关键作用 🕰️🔧 + +你完全抓住了问题的核心!这种情况下确实会出现“数据库已更新,但缓存仍存旧值”的短暂不一致,但双删策略的“第二次删除”正是为了解决这个问题。我们通过时间线拆解和具体例子,来彻底理清这个过程。 + + +### 时间线模拟:数据库更新后,缓存为何会有旧值? + +假设要更新用户“账户余额”(旧值100元→新值200元),双删流程的时间线如下(关键节点标注): + +| 时间点 | 操作/事件 | 数据库状态 | 缓存状态 | +| ------ | ------------------------------ | ------------------- | ------------------------------------------------ | +| T0 | 第一次删缓存(主动删除旧缓存) | 仍为100元(未更新) | 缓存被清空(无数据) | +| T1 | 读请求A到达(在T0-T2之间) | 仍为100元(未更新) | 缓存空→读数据库取100元→写缓存(缓存现在是100元) | +| T2 | 写数据库完成(更新为200元) | 变为200元(已更新) | 缓存仍为100元(旧值) | +| T3 | 第二次删缓存(延迟后执行) | 200元(已更新) | 缓存中的100元被删除(缓存再次清空) | +| T4 | 读请求B到达(T3之后) | 200元(已更新) | 缓存空→读数据库取200元→写缓存(缓存现在是200元) | + + +### 为什么T2到T3期间会“不一致”? + +在T2(数据库更新完成)到T3(第二次删缓存)的时间段内: + +- 数据库:已存储最新值200元(正确); +- 缓存:被读请求A在T1时刻填充了旧值100元(错误)。 + +此时,若有新的读请求在T2-T3之间到达,会直接读取缓存中的旧值100元,导致“缓存旧、数据库新”的不一致。 + + +### 但这种不一致为何是“短暂可控”的? + +关键在**第二次删除(T3)**和**延迟时间的设计**: + +#### 1. 第二次删除强制清空旧缓存 + +无论缓存中是否有旧值,T3时刻的二次删除会直接清除缓存中的100元。此时缓存变为空,后续读请求(如T4的读请求B)只能从数据库读取最新的200元,并重新填充缓存为正确值。 + +#### 2. 延迟时间覆盖“数据库写操作耗时” + +T3 = T2 + 延迟时间(如1秒)。延迟时间需要足够长,确保: + +- 数据库写操作(T0到T2)已完全完成; +- 所有可能在T0-T2期间触发的读请求(如读请求A)都已完成缓存填充。 + +这样,第二次删除时,缓存中可能存在的旧值(100元)会被彻底清除,避免长期留存。 + + +### 极端情况:如果第二次删除失败了怎么办? + +假设T3时刻二次删除因网络问题失败,缓存中的旧值100元未被清除,此时会发生什么? + +- 后续读请求仍会读取到旧值,但这种情况属于“异常”,企业通常会通过以下方式兜底: + - **缓存过期时间**:即使没有二次删除,缓存的TTL(如5分钟)会自动失效,最终强制从数据库加载新值; + - **监控与补偿**:通过日志监控缓存与数据库的差异,发现不一致时手动或自动触发缓存更新。 + + +### 总结:双删的“不一致”是“阶段性的”,而非“永久性的” + +虽然T2-T3期间可能出现“缓存旧、数据库新”的短暂不一致,但: + +- 持续时间由延迟时间决定(通常仅几秒); +- 第二次删除强制清除旧缓存,后续请求会自动加载新值; +- 结合缓存过期时间,最终一致性得以保证。 + + +关于这种“短暂不一致”的业务影响,你还想了解哪些场景?比如“金融系统如何容忍这种短暂不一致”或“如何通过监控发现这类问题”? 😊 + +--- + +### 🧑‍💻 User + +这个第二次删缓存的延迟是什么?能讲一下吗 + +--- + +### 🤖 Assistant + +
+ 已深度思考
+ 好的,用户现在问的是缓存双删中第二次删除的延迟是什么,需要详细解释。首先,我需要明确延迟的作用、如何确定延迟时间,以及实际应用中的例子。用户可能已经理解了双删的基本流程,但对延迟的具体作用和设置方法不太清楚,需要用易懂的方式解释。

首先,要解释延迟的定义:在写数据库完成后,等待一段时间再执行第二次删缓存的操作。然后,说明为什么需要这个延迟——覆盖数据库写操作的耗时,确保所有可能在风险窗口内的读请求已经完成缓存填充,这样第二次删除才能有效清除旧值。

接下来,需要具体说明延迟时间的确定方法。比如,要考虑数据库写操作的最大耗时,加上网络延迟、应用处理时间等。举个例子,假设写数据库平均耗时200ms,最大可能到500ms,那么延迟可以设置为1秒(500ms*2),确保所有可能的读请求已经完成。

然后,可以用时间线的例子来演示延迟的作用,比如没有延迟的话,第二次删除可能在数据库还没写完时就执行,导致无效;而有了延迟,确保数据库已经更新完成,此时删除缓存才能真正清除可能存在的旧值。

还要提到实际应用中如何实现这个延迟,比如使用定时任务、消息队列的延迟投递,或者简单的线程睡眠(但要注意分布式系统中的问题)。同时,需要指出延迟时间不是固定的,需要根据业务场景调整,比如高并发系统可能需要更长的延迟,而低并发可以缩短。

最后,总结延迟的核心目的是确保第二次删除的有效性,避免缓存中残留旧值,从而减少不一致的时间窗口。同时,保持回答的结构,符合之前的格式要求:标题带emoji,解释部分分点或举例,最后提一个问题引导用户继续提问。
+
+ + + +缓存双删中“延迟时间”的作用与设计逻辑 ⏳🔍 + +你问到了双删策略的核心细节!这里的“延迟”不是随意等待,而是经过设计的“时间缓冲带”,它的存在直接决定了双删策略能否有效减少缓存与数据库的不一致。我们通过“为什么需要延迟”“如何确定延迟时长”“实际如何实现”三个维度来拆解。 + + +### 一、为什么需要“延迟时间”?——覆盖“风险窗口”的残留旧值 + +在双删流程中,第一次删缓存(T0)后,可能有读请求在“写数据库前”(T0-T1)从数据库读取旧值并重新写入缓存(比如读请求A在T0-T1期间将旧值100元写回缓存)。此时: + +- 数据库会在T1时刻更新为新值200元; +- 但缓存中已被读请求A写入了旧值100元(这是问题的根源)。 + +如果没有延迟,第二次删缓存(T2)会在写数据库(T1)完成后**立即执行**。但此时可能存在两种情况: + +1. 读请求A的缓存写入操作(旧值100元)还未完成(网络延迟或线程调度延迟),导致第二次删除时缓存中还没有旧值,删除无效; +2. 即使删除了旧值,若后续还有其他读请求在“写数据库完成后、第二次删除前”再次读取到旧值,仍会导致短暂不一致。 + +**延迟的作用**:让“第二次删除”等待足够长的时间,确保所有在“写数据库前”触发的读请求(如读请求A)已经完成缓存写入(旧值100元),此时再删除,就能彻底清除这些残留的旧缓存。 + + +### 二、如何确定“延迟时长”?——基于数据库写操作的耗时 + +延迟时间的核心依据是“数据库写操作的最大耗时”(包括事务提交、主从同步等)。具体计算逻辑如下: + +#### 公式:延迟时间 ≈ 数据库写操作的最大耗时 × 2(或1.5~3倍) + +- **数据库写操作耗时**:指从执行写命令(如`UPDATE user SET balance=200 WHERE id=1`)到数据库确认写入完成(如事务提交、主库同步到从库)的时间。例如,在MySQL中,写操作可能需要50ms~200ms(高并发时可能更长)。 +- **乘以倍数的原因**:覆盖网络延迟、应用服务器与数据库的通信耗时,以及可能的读请求处理延迟(如读请求A的线程可能因CPU调度延迟执行缓存写入)。 + +**举例**: +假设数据库写操作的最大耗时是300ms(包括主从同步),那么延迟时间可以设置为500ms~1秒。这样,即使读请求A在写数据库完成后(T1)才完成缓存写入(旧值100元),第二次删除(T2=T1+500ms)也能在缓存写入完成后执行,确保旧值被清除。 + + +### 三、实际如何实现“延迟删除”?——技术方案与注意事项 + +在代码中实现“延迟删除”有以下常见方式: + +#### 1. 线程睡眠(简单但局限) + +在写数据库完成后,让当前线程休眠指定时间(如500ms),然后执行第二次删除。 + +```java +// 伪代码示例 +public void updateUserBalance(Long userId, Integer newBalance) { + // 第一次删缓存 + redis.del("user:balance:" + userId); + + // 写数据库(假设耗时200ms) + userMapper.updateBalance(userId, newBalance); + + // 延迟500ms(覆盖写操作耗时+可能的读请求处理) + Thread.sleep(500); + + // 第二次删缓存 + redis.del("user:balance:" + userId); +} +``` + +**局限**:在分布式系统中,若多个实例同时更新同一数据,可能因线程休眠导致性能问题;且无法精准控制延迟时间(受JVM调度影响)。 + + +#### 2. 定时任务/延迟队列(更可靠) + +将第二次删除操作提交到延迟队列(如RocketMQ的延迟消息、Redis的ZSET+定时扫描),由队列在指定时间后触发删除。 + +```java +// 使用RocketMQ延迟消息示例 +Message message = new Message( + "cacheDeleteTopic", + "user:balance:" + userId, // 消息内容为缓存键 + ("deleteCache:" + userId).getBytes() +); +message.setDelayTimeLevel(3); // 延迟10秒(具体级别根据MQ配置) +producer.send(message); +``` + +**优势**:解耦业务逻辑,避免阻塞主线程;支持分布式场景,延迟时间更精准。 + + +#### 3. 异步线程池(折衷方案) + +通过线程池提交一个异步任务,任务中先休眠指定时间,再执行删除。 + +```java +// 伪代码示例 +ExecutorService executor = Executors.newSingleThreadExecutor(); +executor.submit(() -> { + try { + Thread.sleep(500); // 延迟500ms + redis.del("user:balance:" + userId); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } +}); +``` + + +### 四、极端情况:延迟时间不够会怎样? + +如果延迟时间过短(如小于数据库写操作耗时),可能出现: + +- 第二次删除时,数据库写操作尚未完成,此时缓存中可能被读请求写入更早的旧值(数据库还未更新),导致删除无效; +- 或者,读请求在“第二次删除后”才完成缓存写入(旧值),此时缓存中仍会残留旧值,需要等待缓存过期才能恢复一致。 + + +### 总结:延迟是双删策略的“时间保险栓” + +延迟时间的设计本质是**用时间换一致性**——通过等待足够长的时间,确保所有可能干扰缓存的读请求已完成旧值写入,再通过第二次删除彻底清除这些旧值。它是双删策略中“主动防御”的关键一环。 + + +关于延迟实现的具体技术细节(比如如何用Redis的ZSET实现延迟队列),或者不同业务场景下延迟时间的经验值(如电商库存vs用户信息),你更想深入了解哪部分? 😊 \ No newline at end of file