缓存三剑客困难

news/2026/1/25 19:15:05/文章来源:https://www.cnblogs.com/yangykaifa/p/19530309

我们来详细聊聊经典的“缓存三剑客”疑问。这是指在使用缓存(尤其是 Redis 或 Memcached)时,最常遇到且对系统危害最大的三种典型障碍:​缓存穿透、缓存击穿、缓存雪崩

理解并解决这三个障碍,是构建高可用、高性能环境的关键。


核心概念:为什么要用缓存?

首先,迅速回顾缓存的作用:为了缓解数据库(如 MySQL)的读写压力,将频繁访问的“热素材”存放在读写速度极快的内存中(缓存)。素材的查询顺序变为:​先查缓存,缓存未命中再查数据库,并将结果写入缓存

“缓存三剑客”问题就出现在这个流程的异常情况中。


第一剑:缓存穿透

1. 困难描述

缓存穿透是指查询一个数据库中根本不存在的数据。由于数据不存在,缓存中自然也不会有(缓存未命中),导致这个请求会直接穿透缓存,每次都要去数据库查询。

  • 关键特征​:数据在数据库和缓存中都不存在。

  • 危害​:若是有人恶意发起大量这类请求(比如用不存在的用户ID查询用户信息),会瞬间给数据库带来巨大压力,甚至导致数据库宕机。

2. 解决方案
  1. 缓存空对象

    • 做法​:即使从数据库没查到,也向缓存中写入一个空值(如 null),并设置一个较短的过期时间(例如 3-5 分钟)。

    • 优点​:搭建简单,能有效应对短期的大量攻击。

    • 缺点​:可能会在缓存中存储大量无意义的空键,占用内存;可能存在短期数据不一致(比如资料后来被录入了,但缓存里还是空值)。

  2. 布隆过滤器

    • 做法​:在缓存之前,设置一个布隆过滤器。布隆过滤器是一个高效的数据结构,用于快速判断“某个元素一定不存在”或“可能存在”于某个集合中。

    • 流程​:

      1. 将所有可能查询的数据的 key 哈希后映射到布隆过滤器的位数组中。

      2. 请求来时,先经过布隆过滤器判断 key 是否存在。

        • 如果不存在,则直接返回空,拒绝访问数据库。

        • 如果存在,才继续后续的缓存查询流程。

    • 优点​:内存占用极小,能从根本上彻底解决穿透问题。

    • 缺点​:实现稍复杂;有误判率(“可能存在”意味着它可能会把一些合法的、但不在过滤器里的新 key 误判为不存在,但不会误判存在的素材为不存在);数据变更时维护布隆过滤器较麻烦。


第二剑:缓存击穿

1. 问题描述

缓存击穿是指一个访问非常频繁的“热点数据”​​(比如某明星的微博)在缓存过期(失效)的瞬间。由于这个 key 可能被大量并发请求访问,在它失效的瞬间,所有对这些数据的请求都会穿透缓存,直接打到数据库上,仿佛缓存被“击穿”了一个洞。

  • 关键特征“热点”。就是​:数据存在,但缓存刚好过期。key

  • 危害​:在热点 key 失效的瞬间,巨大的并发可能压垮数据库。

2. 解决方案
  1. 设置热点数据永不过期

    • 做法​:对于极热点的 key,可以不对其设置过期时间。随后通过后台任务或程序逻辑,在数据更新时主动刷新缓存。

    • 优点​:简单,一劳永逸。

    • 缺点​:需要人工识别热点内容;信息一致性应该靠逻辑维护。

  2. 互斥锁

    • 做法​:当缓存失效时,不立即去查询数据库。而是先尝试获取一个分布式锁(如用 Redis 的 SETNX命令)。只有一个线程能成功获取锁,这个线程负责去查询数据库并重建缓存。其他未获取到锁的线程则等待一段时间后重试查询缓存。

    • 优点​:能很好地保护数据库,逻辑严谨。

    • 缺点​:搭建复杂;如果获取锁的线程挂掉,可能得处理锁超时;性能上有一定损耗(等待)。

  3. 逻辑过期

    • 做法​:不给缓存数据设置物理过期时间,而是在缓存 value 中额外存储一个逻辑过期时间。当业务线程发现数据逻辑上已过期时,它不会立即重建缓存,而是尝试获取互斥锁。拿到锁的线程会启动一个新线程去异步重建缓存,而自己则返回旧的、已过期的数据。其他线程在锁被占用期间,也直接返回旧数据。

    • 优点​:性能极佳,用户无感知,永远有数据返回。

    • 缺点​:实现最复杂;会有一段时间的数据延迟(返回旧数据)。


第三剑:缓存雪崩

1. 问题描述

缓存雪崩是指缓存中大量的 key 在同一时间点或时间段内集中失效,或者缓存服务直接宕机。导致所有原本应该访问缓存的请求,瞬间全部涌向数据库,数据库无法承受巨大的压力而崩溃,进而导致整个系统崩溃,就像雪崩一样。

  • 关键特征​:大量 key 同时失效 或 缓存服务不可用。

  • 与击穿的区别​:击穿是单个热点 key 失效,雪崩是大量 key 同时失效。

2. 解决方案
  1. 设置随机的过期时间

    • 做法​:在为缓存数据设置过期时间时,在基础过期时间上加上一个随机值(如 1-5 分钟的随机数)。这样可以让 key 的过期时间尽量分散,避免同时失效。

    • 优点预防雪崩的首选方案。就是​:简单有效,

  2. 构建高可用的缓存集群

    • 做法​:通过 Redis 的哨兵模式或集群模式,建立缓存服务的高可用。即使个别节点宕机,整个集群仍然可以提供服务。

    • 目的​:防止因缓存服务宕机而引发的雪崩。

  3. 服务熔断与降级

    • 做法​:当应用系统检测到数据库压力过大或响应过慢时,启动熔断机制,暂时停止访问数据库,直接返回预设的默认值(如“系统繁忙,请稍后再试”)或兜底数据。给数据库“止血”,等缓存服务恢复后,再关闭熔断。

    • 目的​:牺牲部分用户体验和非核心功能,保证核心业务和系统整体不崩溃。

  4. 持久化存储预热

    • 做法​:在缓存服务重启或大规模失效后,架构正式对外提供服务前,先通过一个脚本或程序,将高频访问的数据提前加载到缓存中。


总结与对比

问题类型

核心原因

关键特征

主要解决方案

缓存穿透

查询不存在的数据

数据库和缓存中都没有

1. 缓存空对象
2. 布隆过滤器

缓存击穿

热点 key​ 突然过期

单个热点 key 失效,并发高

1. 永不过期
2. 互斥锁
3. 逻辑过期

缓存雪崩

大量 key​ 同时失效或缓存宕机

大规模缓存失效,框架级故障

1. 设置随机过期时间
2. 缓存高可用集群
3. 服务熔断与降级

应对法则​:

  1. 防穿透否合法。就是​:守住第一道门,判断请求

  2. 防击穿​:保护热点,避免单点并发。

  3. 防雪崩​:分散风险,保证服务可用。

在实际计划中,通常需要组合运用这些策略,才能构建一个健壮的缓存系统。

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

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

相关文章

2026年 印刷厂家推荐排行榜:化妆瓶、亚克力、咖啡杯、金属、PC满板、电子产品、汽车零件、遥控面板、医疗器材、罐体印刷,专业定制与高精度工艺之选

2026年印刷厂家推荐排行榜:专业定制与高精度工艺之选 在当今制造业精细化、个性化需求日益增长的背景下,特种印刷技术已成为提升产品附加值、实现品牌差异化竞争的关键环节。无论是化妆品包装的奢华质感、电子产品的…

AI工程师必看!X-Distill技术详解:让机器人仅需10条数据就能学会复杂操作,建议收藏学习!

X-Distill是一种创新的跨架构知识蒸馏技术,解决了机器人视觉中的"数据悖论"问题。该方法通过两步法:先在ImageNet上将大型ViT的视觉知识蒸馏到小型CNN中,再在机器人任务上微调,使仅需10条演示数据的模型就能学习书写、抓…

AI驱动的动态调度:从理论到实践,程序员必备的智能制造核心技能(建议收藏)

制造业正从大批量生产转向多品种小批量生产,不确定性成为常态。传统"以计划为中心"的生产方式难以应对变化,AI驱动的动态调度成为关键解决方案。通过实时感知、策略演化和闭环自调节,动态调度使制造系统从"静态匹配"转向…

NeurIPS 2025多模态表征学习新突破:4篇论文详解

本文介绍了2025年NeurIPS会议上的4篇多模态表征学习论文,分别探讨了有限数据场景下的多模态对齐(STRUCTURE)、模态错位的理论价值、特征因果分解(FCD)方法以及通过视觉嵌入蒸馏(VisPer-LM)提升MLLM视觉感知能力。这些创新方法为解决多模态学习中的数据稀缺、噪声干扰…

亲测BSHM人像抠图镜像,效果惊艳真实体验分享

亲测BSHM人像抠图镜像,效果惊艳真实体验分享 最近在做一批电商商品图的背景替换,需要把真人模特从各种复杂场景中干净利落地抠出来。试过好几款开源模型——MODNet跑得快但头发边缘毛躁,U2-Net细节好却慢得像在等咖啡凉透,Robust…

大模型部署难题破解:并行计算架构详解与实战

本文解析了大模型部署中的并行计算架构,包括模型并行(按层或张量拆分)、流水线并行和数据并行,以及三者结合的混合并行策略。这些技术解决了大模型显存不足和计算效率问题,使AI产品经理能从"只会用模型"上升…

程序员学习大模型必看:腾讯云智商业产品面试经验,AI商业化思维与未来趋势深度解析(建议收藏)

本文详细记录腾讯云智商业产品三轮面试经验,重点考察商业化思维和AI产品理解。作者分享对AI现状看法:存在泡沫、开源与闭源模型能力接近、小模型专业化趋势,以及AI医疗等未来发展方向。面试中探讨了产品运营与策划区别、AI2B商业模式&#xf…

LangChain、LangFlow、LangGraph:大模型应用开发框架全解析

本文详细解析了LangChain生态中的三大框架:LangChain作为LLM应用的基础框架,提供系统化组织能力;LangFlow是基于LangChain的可视化低代码工具,降低使用门槛;LangGraph则为复杂Agent提供状态机控制。三者定位不同&#…

大模型微调学习路线:从0到1掌握AI落地核心技能,附四阶段详细规划

本文详细介绍了大模型微调的四阶段学习路线:第一阶段(20天)掌握AI环境配置和基础编程;第二阶段(1个月)学习大模型项目框架和数据处理;第三阶段(2个月)通过论文阅读和复现培养创新能力;第四阶段(1个月)深入前沿技术优化与创新。大模…

2026年 环境老化试验箱厂家推荐排行榜,氙灯/紫外线/湿度/复合循环/盐水喷雾/臭氧/热老化试验箱专业品牌深度解析

2026年环境老化试验箱厂家推荐排行榜:氙灯/紫外线/湿度/复合循环/盐水喷雾/臭氧/热老化试验箱专业品牌深度解析 在材料科学、汽车制造、航空航天、电子电器及涂料化工等众多工业领域,产品的长期可靠性与耐久性是衡量…

救命神器8个AI论文写作软件,自考学生搞定毕业论文不求人!

救命神器8个AI论文写作软件,自考学生搞定毕业论文不求人! 自考路上的得力助手:AI论文写作工具如何改变你的学习方式 在当今信息爆炸的时代,自考学生面对毕业论文的压力愈发明显。传统的写作方式不仅耗时费力,还容易因缺…

2026年冷藏车箱厂家推荐排行榜:4米2/3米2/6米8/7米7/9米6冷链运输车箱,精选耐用保温与合规高效品牌

2026年冷藏车箱厂家推荐排行榜:4米2/3米2/6米8/7米7/9米6冷链运输车箱,精选耐用保温与合规高效品牌 随着全球生鲜电商、医药冷链及预制菜产业的蓬勃发展,冷链物流已成为现代供应链体系的核心支柱。作为冷链运输的“…

2026年印刷设备厂家实力推荐榜:单色移印机/全自动平面丝印机/多色移印机/曲面丝印机/标准烫金机/化妆品瓶子印刷机,精选高效智能印刷解决方案

2026年印刷设备厂家实力推荐榜:单色移印机/全自动平面丝印机/多色移印机/曲面丝印机/标准烫金机/化妆品瓶子印刷机,精选高效智能印刷解决方案 在全球制造业智能化、柔性化转型的浪潮下,印刷设备作为产品表面装饰、信…

web3生态分层

现在的WEB3生态,已经不是一个简单的比特币网络了,它演化成了一个庞大复杂的数字国家。我们可以用分层的方式来拆解它,就像理解一个城市的:地基、公路、水电煤、商业区。基础设施层 L0→L3 L0 底层传输层 它的主要作…

基于springboot+vue的农产品销售管理系统(源码+论文+部署+安装)

感兴趣的可以先收藏起来,还有在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望可以帮到大家。一、程序背景随着农业生产规模化、市场化推进及信息技术迅猛发展,农产品销售逐渐突破地域限制…

2026年不锈钢工程厂家实力推荐榜:别墅、会所、酒店、商业空间等高端定制,匠心工艺与创新设计深度解析

2026年不锈钢工程厂家实力推荐榜:别墅、会所、酒店、商业空间等高端定制,匠心工艺与创新设计深度解析 随着现代建筑与室内设计美学的不断演进,不锈钢材料凭借其卓越的物理性能、丰富的表面处理工艺以及独特的现代感…

Opencode CLI 配置 MiniMax M2 (Nvidia API) 指南

Opencode CLI 配置 MiniMax M2 (Nvidia API) 指南 本文档详细介绍如何在 opencode CLI 中配置和使用 Nvidia 托管的 MiniMax M2 大模型。 1. 申请 NVIDIA API Key 要使用 MiniMax M2 模型,您首先需要从 NVIDIA NIM 平…

2026 年 1 月割草船厂家推荐排行榜:无人/自动/遥控割草船,水域/河道/鱼塘/水下割草船,水草打捞/收割/清理船,高效清淤与生态维护利器精选

2026 年 1 月割草船厂家推荐排行榜:无人/自动/遥控割草船,水域/河道/鱼塘/水下割草船,水草打捞/收割/清理船,高效清淤与生态维护利器精选 随着全球对水域生态环境治理与高效农业、渔业生产需求的日益增长,割草船作…

实用指南:16000+字!Java集合笔记

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

告别繁琐命令行:自研多线程 SSH 极速文件传输助手(附 GitHub 源码)

SSH Turbo File Transfer是一款基于Python开发的轻量级SFTP文件传输工具,专为提升服务器运维和深度学习训练中的文件传输效率而设计。该工具具有以下核心优势:1)采用多线程并行传输技术,显著提升大量小文件的传输速…