当前位置: 首页 > article >正文

Redis的缓存雪崩、缓存穿透、缓存击穿是什么?怎么解决?

目录一、先分清穿透、击穿、雪崩到底差在哪二、缓存穿透防的是 “不存在的请求”1. 问题本质2. 我的项目里是这么解决的① 参数校验 拦截② 缓存空值③ 布隆过滤器高风险场景用三、缓存击穿防的是 “热点 key 瞬间过期”1. 问题本质2. 我的两种方案各有适用场景方案一互斥锁强一致性首选方案二逻辑过期高并发场景首选四、缓存雪崩防的是 “大面积失效或 Redis 挂了”1. 问题本质2. 我在项目里的系统级防护① 给 TTL 加随机值② Redis 高可用③ 多级缓存兜底④ 限流熔断五、我的总结怎么根据场景选方案最后说句实在的做 Java 后端开发谁没被 Redis 缓存问题坑过高峰期一个请求进来Redis 没查到直接打穿到数据库瞬间 CPU 飙满、连接池打满接口直接雪崩。这背后往往就是缓存穿透、击穿、雪崩这三个问题在搞鬼。今天我就用最直白的方式把这三个问题掰开揉碎讲清楚它们的本质区别、风险点以及你在项目里可以直接抄的解决方案。一、先分清穿透、击穿、雪崩到底差在哪很多人面试都分不清这三个其实一句话就能说清楚穿透查的东西本来就不存在。击穿单个热点东西刚好过期了。雪崩一堆东西同时过期了或者 Redis 直接挂了。你可以想象成一个超市穿透你要买一个店里根本不卖的东西问一次服务员一次问十次十次都得去仓库查仓库迟早被你烦死。击穿店里最热门的可乐卖完了成千上万的人同时问服务员服务员都得去仓库拿瞬间就挤爆了。雪崩店里所有的饮料同时卖完了或者仓库直接炸了所有人都挤向唯一的通道整个店直接瘫痪。问题核心特征典型场景主要风险常见方案缓存穿透查询的数据根本不存在恶意请求、错误参数、爬虫数据库被无效请求打满参数校验、缓存空值、布隆过滤器缓存击穿单个热点 key 失效瞬间并发回源热门商品、热点店铺、活动库存数据库被热点流量冲垮互斥锁、逻辑过期、热点预热缓存雪崩大量 key 同时失效或 Redis 故障批量导入缓存、整点统一过期、节点宕机请求成片压垮数据库和下游随机 TTL、高可用、多级缓存、限流熔断二、缓存穿透防的是 “不存在的请求”1. 问题本质你请求的数据Redis 里没有数据库里也没有。每次请求都得打到数据库数据库查不到也没法回写缓存结果就是数据库被一堆无效请求打满。典型场景恶意爬虫、参数校验不严比如用户用id-1疯狂请求你的接口。2. 我的项目里是这么解决的我一般用三层防护成本低效果好① 参数校验 拦截先在入口把明显非法的请求挡掉比如负数 ID、格式错误的手机号、空参数不让它们进缓存层。② 缓存空值数据库查不到时把空字符串也缓存起来设置一个很短的 TTL比如 2 分钟。这样下次再查同一个不存在的 IDRedis 直接返回空不会再打数据库。// 伪代码 Shop shop getById(id); if (shop null) { // 把空值写入Redis2分钟过期 stringRedisTemplate.opsForValue().set(key, , 2, TimeUnit.MINUTES); return null; }③ 布隆过滤器高风险场景用如果你的接口经常被攻击请求量特别大那就用布隆过滤器。把所有可能存在的 key 提前存进去请求来时先判断不存在的直接拒绝连 Redis 都不碰。缺点是要提前规划数据量有极微小的误判率。三、缓存击穿防的是 “热点 key 瞬间过期”1. 问题本质某个超级热门的 key比如秒杀商品、爆款店铺在高峰期刚好过期成千上万的请求同时发现缓存失效一起回源数据库直接把数据库冲垮。2. 我的两种方案各有适用场景方案一互斥锁强一致性首选只让一个请求去查库重建缓存其他请求要么等待重试要么直接返回旧数据。// 伪代码 String lockKey lock:shop: id; boolean isLock tryLock(lockKey); if (!isLock) { // 没拿到锁休眠一下重试或者直接返回旧数据 Thread.sleep(50); return queryWithMutex(id); } // 拿到锁了去查库重建缓存 try { Shop shop getById(id); stringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(shop), 30, TimeUnit.MINUTES); } finally { unLock(lockKey); }优点是数据一致性好缺点是会有短暂等待对用户体验有一点点影响。方案二逻辑过期高并发场景首选不设物理 TTL而是在缓存里存一个逻辑过期时间。请求来了先看逻辑时间没过期直接返回如果过期了先返回旧数据再开个新线程去后台异步更新缓存。优点是用户体验丝滑完全无等待缺点是会短暂返回过期数据适合一致性要求不高的热点读场景。四、缓存雪崩防的是 “大面积失效或 Redis 挂了”1. 问题本质大量 key 同时过期或者 Redis 集群整体宕机导致所有请求瞬间打到数据库形成级联故障。2. 我在项目里的系统级防护雪崩不能靠单一方案必须多管齐下① 给 TTL 加随机值把过期时间打散避免所有 key 同时在整点失效。// 伪代码 // 基础30分钟加0-10分钟随机值 int random new Random().nextInt(10); stringRedisTemplate.opsForValue().set(key, value, 30 random, TimeUnit.MINUTES);② Redis 高可用用主从、哨兵或者集群部署避免单点故障导致整个缓存层挂掉。③ 多级缓存兜底在 Redis 前面再加一层本地缓存比如 Caffeine。Redis 出问题时热点数据还能靠本地缓存扛一波流量。④ 限流熔断给接口加上限流比如每秒只允许 100 个请求回源数据库超过的直接降级返回默认数据保护数据库不被冲垮。五、我的总结怎么根据场景选方案普通业务 key缓存空值 合理 TTL解决穿透问题。热点读 key互斥锁或逻辑过期解决击穿问题。系统层面随机 TTL Redis 高可用 限流降级预防雪崩。记住没有银弹只有最合适的组合拳。最后说句实在的缓存这三个问题本质上都是高并发下的 “木桶效应”—— 缓存层一旦出现短板所有压力都会瞬间传导到数据库。所以写缓存代码的时候别只想着怎么存进去多想想它过期了怎么办、挂了怎么办、被恶意攻击了怎么办。

相关文章:

Redis的缓存雪崩、缓存穿透、缓存击穿是什么?怎么解决?

目录 一、先分清:穿透、击穿、雪崩,到底差在哪? 二、缓存穿透:防的是 “不存在的请求” 1. 问题本质 2. 我的项目里是这么解决的 ① 参数校验 拦截 ② 缓存空值 ③ 布隆过滤器(高风险场景用) 三、…...

Woodpecker:无需训练的多模态大模型幻觉检测与修正实战

1. 项目概述:当多模态大模型开始“胡说八道”,我们如何“捉虫”?如果你最近玩过像 LLaVA、MiniGPT-4 这类多模态大语言模型,可能会遇到一种让人哭笑不得的情况:你上传一张图片,问它“图片里有什么&#xff…...

终极Happy Island Designer指南:5分钟快速打造梦想岛屿

终极Happy Island Designer指南:5分钟快速打造梦想岛屿 【免费下载链接】HappyIslandDesigner "Happy Island Designer (Alpha)",是一个在线工具,它允许用户设计和定制自己的岛屿。这个工具是受游戏《动物森友会》(Animal Crossing…...

SCALE框架:数学推理中的动态资源分配技术

1. SCALE框架核心设计理念在数学推理任务中,传统方法往往采用均匀分配计算资源的策略,这种"一刀切"的方式会导致两个典型问题:简单问题过度消耗资源,复杂问题又得不到充分计算。SCALE框架的创新点在于将动态资源分配机制…...

多模态AI图表空间理解:评估体系与实现策略

1. 项目背景与核心价值图表空间理解能力正在成为多模态AI系统的关键评估指标。在金融分析、医疗影像、工业设计等专业领域,图表不仅是数据可视化工具,更是复杂信息的结构化载体。传统模型对图表中空间关系、元素关联、隐含逻辑的理解往往停留在表层特征提…...

X-TRACK开源GPS自行车码表:构建专业骑行数据记录与分析系统

X-TRACK开源GPS自行车码表:构建专业骑行数据记录与分析系统 【免费下载链接】X-TRACK A GPS bicycle speedometer that supports offline maps and track recording 项目地址: https://gitcode.com/gh_mirrors/xt/X-TRACK 对于骑行爱好者来说,准…...

终极指南:如何用Nucleus Co-Op让单机游戏变身为分屏多人派对

终极指南:如何用Nucleus Co-Op让单机游戏变身为分屏多人派对 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 厌倦了只能一个人享受单机…...

将 Hermes Agent 工具链连接到 Taotoken 自定义模型提供商

将 Hermes Agent 工具链连接到 Taotoken 自定义模型提供商 1. 准备工作 在开始配置之前,请确保您已经完成以下准备工作:拥有有效的 Taotoken API Key,并在控制台中确认该 Key 具有访问所需模型的权限。同时,确保 Hermes Agent 已…...

WordPress子主题RiPro-V5van无授权全开源版

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示一、详细介绍 WordPress子主题RiPro-V5van无授权全开源版,直接上使用方法:WordPress后台上传就行 这个主题是1.0版本开源的,有能力的可以二次开发一下加一些自己喜欢的功能。 二、效果展示 1…...

Windows隐私保护终极指南:Boss-Key一键隐藏窗口完全教程 [特殊字符]

Windows隐私保护终极指南:Boss-Key一键隐藏窗口完全教程 🚀 【免费下载链接】Boss-Key 老板来了?快用Boss-Key老板键一键隐藏静音当前窗口!上班摸鱼必备神器 项目地址: https://gitcode.com/gh_mirrors/bo/Boss-Key 在当今…...

智能体跨领域评估框架设计与工程实践

1. 项目背景与核心价值去年参与某跨国企业的智能体系统升级项目时,我们遇到一个棘手问题:当业务需求从单一客服场景扩展到物流调度、医疗咨询等跨领域场景时,原有评估体系完全失效。不同部门的KPI打架,技术团队疲于奔命却无法证明…...

从UFLD到UFLDv2实战:在自定义数据集上快速实现车道线检测(PyTorch版)

从UFLD到UFLDv2实战:在自定义数据集上快速实现车道线检测(PyTorch版) 车道线检测是自动驾驶和机器人导航中的基础任务,而UFLD系列模型以其高效和准确的特点成为该领域的热门选择。本文将带您从零开始,在PyTorch框架下实…...

RAGFlow 系列教程 第15课:RAPTOR -- 递归抽象树检索

系列: RAGFlow v0.25.0 深度解读 作者: 耿雨飞 前置知识: 第10课(文档解析)、第12课(混合检索)、第14课(GraphRAG) 导读 在前面的课程中,我们学习了 RAGFlow 的分块策略和混合检索引擎。标准 RAG 管线将文档切分为相对独立的分块,然后通过向量相似度或全文匹配来检索最…...

顺序表——动态分配与静态分配

#include <stdio.h> #include <stdlib.h> #define InitSize 100 //定义动态表的初始长度 #define MaxSize 100 //定义一个静态顺序表的最大值 //静态顺序表节点定义 typedef struct {int data[MaxSize]; //ElemType data[];---使用int为例定义一个静态顺序表int …...

从薛定谔方程到std::vector<complex<double>>:量子比特态演化在C++中的11层抽象解构

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;从薛定谔方程到std::vector>&#xff1a;量子比特态演化在C中的11层抽象解构量子计算的底层物理描述始于含时薛定谔方程&#xff1a;$i\hbar\frac{\partial}{\partial t}|\psi(t)\rangle H|\psi(t)…...

SimulU零样本语音同传系统架构与优化实践

1. 项目背景与核心价值去年参加国际会议时&#xff0c;我亲眼目睹了同传译员连续工作两小时后出现的明显疲劳现象——翻译准确率下降30%&#xff0c;反应延迟增加1.5秒。这促使我开始思考&#xff1a;是否存在一种技术方案&#xff0c;能在保证翻译质量的前提下&#xff0c;实现…...

Stellar-Chat开源项目深度解析:从架构设计到私有化部署实战

1. 项目概述与核心价值最近在折腾一个挺有意思的开源项目&#xff0c;叫 Stellar-Chat。乍一看名字&#xff0c;你可能会联想到“星际聊天”&#xff0c;感觉有点科幻。实际上&#xff0c;它确实是一个旨在构建“下一代”智能对话体验的开源项目。我花了几天时间&#xff0c;从…...

别再死记硬背了!用一张图搞懂ZLMediaKit的RTSP转RTMP/WebRTC核心流程

可视化拆解ZLMediaKit转流架构&#xff1a;从协议协商到数据封装的完整链路 第一次接触流媒体服务开发时&#xff0c;面对复杂的协议转换流程&#xff0c;很多开发者都会陷入代码细节的迷宫。ZLMediaKit作为一款支持RTSP、RTMP、WebRTC等多种协议的开源流媒体服务器&#xff0c…...

LLM驱动的智能测试生成:提升软件质量与效率

1. 项目背景与核心问题在传统软件工程实践中&#xff0c;测试用例生成往往被视为开发流程中的附属环节。大多数团队采用手工编写测试脚本或依赖基础自动化工具&#xff0c;这种方式在小型项目中尚可应付&#xff0c;但当面对现代复杂系统时&#xff0c;测试覆盖率与效率问题日益…...

Minimap2进阶指南:巧用 `-A`、`-B`、`-O` 等打分参数,让你的比对结果更‘准’

Minimap2参数调优实战&#xff1a;如何通过打分参数提升比对精度 在基因组数据分析领域&#xff0c;比对工具的精确度直接影响后续变异检测和注释的可靠性。Minimap2作为目前最受欢迎的轻量级比对工具之一&#xff0c;其灵活的参数系统让用户能够针对不同数据类型和场景进行精细…...

别急着给 Claude Code 接一堆 MCP

别急着给 Claude Code 接一堆 MCP很多人熟练使用 Claude Code 之后&#xff0c;会自然进入下一步&#xff1a; 既然 Claude Code 能读项目、能跑命令、能记规则&#xff0c;那是不是应该把 GitHub、Sentry、数据库、Figma全接上&#xff0c;再装几十个 subagents&#xff0c;让…...

无CPU并行λ演算:数字逻辑中的函数式革命

1. 无CPU并行λ演算&#xff1a;数字逻辑中的函数式革命在晶体管密度持续飙升而时钟频率增长停滞的时代&#xff0c;计算机架构正在经历一场范式转移。传统CPU架构的串行瓶颈日益凸显&#xff0c;而函数式编程因其天然的无状态特性和并行潜力&#xff0c;正在数字逻辑领域开辟一…...

SWE-EVO基准测试:评估编码代理在长期软件维护中的适应能力

1. 项目背景与核心价值在软件开发领域&#xff0c;长期维护和迭代的项目往往面临独特的挑战。不同于从零开始的新项目&#xff0c;这些"活系统"&#xff08;Living System&#xff09;需要开发人员在已有代码基础上进行持续优化、功能扩展和缺陷修复。SWE-EVO基准测试…...

JobOS:基于AI Agent与RAG的智能求职自动化平台设计与实践

1. 项目概述&#xff1a;一个为AI求职者量身定制的“操作系统” 如果你正在找AI方向的实习或工作&#xff0c;尤其是大模型、Agent、RAG这些热门领域&#xff0c;那你一定经历过这样的痛苦&#xff1a;每天在Boss直聘、牛客网、猎聘上手动刷新&#xff0c;海投简历却石沉大海&…...

基于.NET MAUI的ChatGPT客户端开发实战:从架构到发布

1. 项目概述与核心价值 最近在捣鼓 .NET MAUI&#xff0c;想找个有意思的练手项目&#xff0c;正好看到社区里 Daniel Monettelli 大佬开源的这个 ChatGPT 客户端。作为一个全栈老鸟&#xff0c;我第一眼就被它吸引了&#xff1a;这不仅仅是一个简单的 API 调用 Demo&#xff…...

STORM:轻量级物体表示学习在机器人抓取中的应用

1. 项目背景与核心价值在机器人操作任务中&#xff0c;如何让机器快速理解并抓取不同物体一直是个关键挑战。传统方法通常需要为每个新物体单独建模或收集大量标注数据&#xff0c;这在实际应用中既耗时又不灵活。STORM的出现&#xff0c;正是为了解决这个痛点。我曾在工业分拣…...

基于ASP.NET Core与Blazor构建开源实时协作平台ClawTalk的部署与架构解析

1. 项目概述&#xff1a;一个开源的实时聊天与协作平台最近在折腾一个内部团队协作工具&#xff0c;发现市面上的产品要么太重、要么太贵&#xff0c;要么数据安全上总让人有点不放心。于是&#xff0c;我把目光投向了开源社区&#xff0c;想找一个能自己部署、功能又足够现代的…...

python pika

# 深入理解Python Pika&#xff1a;一个资深开发者的实践笔记 聊到Python的消息队列中间件&#xff0c;Pika这个名字总会浮现在我脑海里。它不是那种花哨的框架&#xff0c;更像是一把可靠的瑞士军刀——简单、直接&#xff0c;却能在关键时候解决棘手问题。让我们从几个维度来…...

Realtek 10GbE芯片组解析:低成本高速网络方案

1. Realtek新一代10GbE芯片组解析&#xff1a;低成本高速网络的新选择在Computex 2025展会上&#xff0c;Realtek正式发布了三款面向消费级市场的10GbE网络解决方案——RTL8127 PCIe控制器、RTL8159 USB 3.2控制器和RTL8261C PHY芯片。这标志着继2024年5GbE产品线成功铺开后&am…...

基于Python与GitPython构建开源项目批量管理工具OpenClaw

1. 项目概述&#xff1a;一个基于Git的“开源之爪”最近在GitHub上闲逛&#xff0c;发现了一个挺有意思的项目&#xff0c;名字叫openclaw。光看这个名字&#xff0c;你可能会联想到“开源之爪”&#xff0c;感觉像是一个能帮你抓取、整理、管理开源资源的工具。没错&#xff0…...