<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Redis on 架构视界</title>
    <link>https://blog-architectview.pages.dev/tags/redis/</link>
    <description>Recent content in Redis on 架构视界</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <copyright>© 2026 架构视界 Architect View</copyright>
    <lastBuildDate>Mon, 18 May 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://blog-architectview.pages.dev/tags/redis/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Redis 高并发缓存架构：击穿、穿透、雪崩全解</title>
      <link>https://blog-architectview.pages.dev/posts/redis-cache-breakdown-penetration-avalanche/</link>
      <pubDate>Mon, 18 May 2026 00:00:00 +0000</pubDate>
      <guid>https://blog-architectview.pages.dev/posts/redis-cache-breakdown-penetration-avalanche/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;缓存是提升系统吞吐量最简单的手段，但它引入的问题也比你想象的更多。击穿、穿透、雪崩——这三个听起来像地质灾害的名词，是每一个高并发系统设计者必须跨越的三道坎。&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;缓存的基本模型&#34;&gt;缓存的基本模型&lt;/h2&gt;&#xA;&lt;p&gt;在深入三个核心问题之前，先建立一个标准的缓存读写模型：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;标准缓存读取流程：&#xA;&#xA;客户端 → 缓存层（Redis）→ [命中] → 直接返回&#xA;                         → [未命中] → 数据库层 → 写入缓存 → 返回&#xA;&#xA;标准缓存写入流程：&#xA;&#xA;方案 A（Cache Aside）：先更新数据库，再删除缓存&#xA;方案 B（Read/Write Through）：通过缓存层代理读写&#xA;方案 C（Write Behind）：只写缓存，异步刷入数据库&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;在绝大多数互联网场景中，&lt;strong&gt;Cache Aside&lt;/strong&gt;（旁路缓存）是最常用的模式——代码直接操作 Redis 和数据库，简单透明。但正是这种简单性，隐藏着三大问题。&lt;/p&gt;&#xA;&lt;h2 id=&#34;问题一缓存穿透cache-penetration&#34;&gt;问题一：缓存穿透（Cache Penetration）&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;定义&lt;/strong&gt;：查询一个根本不存在的数据，缓存中没有，数据库中也没有。每次请求都会穿透缓存直接打到数据库。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;正常请求：&#xA;  查询 user_id=123 → 缓存命中 → 返回（快）&#xA;&#xA;穿透请求：&#xA;  查询 user_id=-1 → 缓存未命中 → 查数据库 → 数据库也没有 → 返回空&#xA;  查询 user_id=-1 → 缓存未命中 → 查数据库 → 数据库也没有 → 返回空&#xA;  查询 user_id=-1 → 缓存未命中 → 查数据库 → 数据库也没有 → 返回空&#xA;  &#xA;  如果每秒 10000 次这样的请求，数据库直接被压垮&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;穿透通常由恶意攻击或业务 Bug 引起——攻击者构造大量不存在的 ID，绕过缓存直接攻击数据库。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
