V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
SGL
V2EX  ›  程序员

缓存击穿(Cache Breakdown)是不是一个很迷惑的翻译

  •  
  •   SGL · 21 小时 2 分钟前 · 2459 次点击
    缓存穿透(Cache Penetration)翻译比较形象,缓存和数据库都没有,连兜底的都每个,可不就穿过去了,透了一个窟窿,从逻辑上比较形象。

    缓存雪崩(Cache Avalanche)翻译也不错,请求一下子都垮下来了,从感性上比较形象。

    缓存击穿(Cache Breakdown), 这个穿字一出来就很容易和缓存穿透混淆,最有问题的是它用了“穿”,并且这个穿还是和“穿透”是同一个字。
    13 条回复    2025-09-08 17:02:05 +08:00
    lesismal
        1
    lesismal  
       19 小时 25 分钟前   ❤️ 2
    这几个定义确实不怎么好,即使是英文原版,加上定义的细节,非常容易让人记混。反正如果有人面试问我这几个,我八成回答不准确。

    我喜欢用自己的分类总结,比这三个定义更容易记忆而且更全面。如下:


    这几个工程问题根本原因的共性:查询缓存的 key 不存在。主要有两类:
    1. 传入的查询的 key 参数本来就不存在。例如传错参数、攻击时黑客随便弄的空 key 。
    2. 业务上曾经存在该 key 、但是设置了有效期、查询时过期了。

    造成工程问题时的另一个维度就是 key 的数量:
    1. 少量 key
    2. 大量 key

    key 不存在的原因、key 的数量维度结合起来的四种情况。

    完整详情,欢迎评论:
    https://gist.github.com/lesismal/3640d2a74db3eaf303bb8d40ecd0de05
    nuk
        2
    nuk  
       18 小时 18 分钟前   ❤️ 2
    穿透是本来 cache 就不会起作用,击穿是本来 cache 需要起作用但没起作用
    xljya
        3
    xljya  
       16 小时 47 分钟前
    从中文层面的话,是有点迷惑,穿透是不一定破坏结构(光穿透玻璃),但也包含了破坏结构的情况,所以能说击穿是穿透的一个特例
    aarontian
        4
    aarontian  
       15 小时 24 分钟前   ❤️ 2
    我比较排斥的八股属于:哪怕你书本基础再扎实,人再聪明,项目经验再丰富再垂直,但你没专门为了面试背过这个概念,那就会懵。

    “什么叫缓存穿透/击穿/雪崩”这个问题就比较典型,一直以来给我的感觉就是为八股而八股的 redis 初代八股。
    doraemonki
        5
    doraemonki  
       11 小时 6 分钟前   ❤️ 1
    也不知道是谁发明的这些词,说来说去就一句话搞定:缓存查不到了
    dapang1221
        6
    dapang1221  
       9 小时 59 分钟前
    击穿指的是缓存废了,把后面的数据库击穿了吧,比如某个 cache key 配置的有误,导致缓存没生效,突然成千上万个请求穿过了缓存打到了数据库查询上
    charlie21
        7
    charlie21  
       9 小时 42 分钟前
    缓存查到了
    缓存没查到了

    这是一个维度的东西

    -

    缓存应该查到而查到了
    缓存不应该查到而查到了
    缓存应该查到而没查到
    缓存不应该查到而没查到

    “查没查到” 和 “应该不应该查到”,这是两个维度的东西。 你举出的那个描述力很低名词 是指 如上四种情况 的哪个情况?
    doraemonki
        8
    doraemonki  
       8 小时 42 分钟前
    @charlie21 你看直接描述大家都懂,况且这个知识点本身属于缓存淘汰策略,非要造个词语出来吗
    SGL
        9
    SGL  
    OP
       8 小时 36 分钟前
    @charlie21 是比那四种情况中更细的一种情况,短时间大量的针对个别热点缓存的“缓存应该查到而没有查到”,这个短时间短到什么地步——>第一个缓存未命中的请求处理中来不及更新缓存,大量相似请求接踵而至。
    doraemonki
        10
    doraemonki  
       8 小时 23 分钟前
    @SGL 这么细分下去再排列组合,多少词语都不够用的
    SGL
        11
    SGL  
    OP
       8 小时 22 分钟前
    @doraemonki 没办法,这玩意儿是 Redis 的八股老题
    SGL
        12
    SGL  
    OP
       8 小时 20 分钟前
    @doraemonki 不过这个场景挑出来其实也不是没有道理,热点数据失效,就是概念定义的词汇选的不好。
    moverinfo
        13
    moverinfo  
       2 小时 35 分钟前 via iPhone
    缓存穿透是意味着缓存不存在,然后使请求打到了 DB ,而 DB 里也没有数据。这时候访问 DB 是没有意义的。而击穿是指热键失效问题,大量的请求打到了同一个键,造成并发访问 DB 的情况,等于缓存失效了。雪崩是指大量的不同的缓存同时失效了。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3192 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 11:37 · PVG 19:37 · LAX 04:37 · JFK 07:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.