🚨 1、简述

随着系统规模扩大,Redis 缓存被广泛用于数据预热、热点数据防护和高并发系统优化。然而在高并发环境中,缓存雪崩、穿透、击穿等问题若处理不当,可能导致系统雪崩式崩溃。

本文从原理、原因出发,结合实际项目经验,讲解如何应对这三大常见问题,并给出对应实践方案。

在这里插入图片描述


💣 2、缓存雪崩(Cache Avalanche)

✅ 定义:

大量缓存同时失效,导致请求直接打到数据库或下游服务,造成系统瞬时过载甚至崩溃。

🧨 触发场景:

🔹 同一时间大量缓存设置了相同过期时间。
🔹 Redis 故障、重启或崩溃,导致全缓存失效。

✅ 解决方案:

方案实现方式
缓存过期时间加随机给不同缓存设置随机 TTL(如 ±5%)
本地限流/降级Hystrix、Sentinel、RateLimiter 等
缓存预热应用启动时加载关键缓存数据
多级缓存引入本地缓存(如 Caffeine)减少对 Redis 的依赖
异步重建缓存通过队列异步刷新热点数据缓存

🛠 实践样例:设置随机过期时间

int baseExpire = 60 * 10; // 10分钟
int random = new Random().nextInt(60); // 加1分钟以内的随机值
redisTemplate.opsForValue().set("product:123", data, baseExpire + random, TimeUnit.SECONDS);

🕳️ 3、缓存穿透(Cache Penetration)

✅ 定义:

请求的数据既不在缓存中,也不在数据库中,攻击者通过大量随机 key 造成数据库压力激增。

🧨 触发场景:

🔹 攻击者构造不存在的 key 请求接口。
🔹 key 本身无意义(如 user:-1)

✅ 解决方案:

方案实现方式
缓存空对象查询结果为 null,也缓存一段时间(短 TTL)
参数校验请求层校验 ID 合法性,如 ID > 0
布隆过滤器使用布隆过滤器拦截不存在的 key 请求
接口限流控制访问频率,防止恶意请求刷爆系统

🛠 实践样例:缓存空值

String key = "user:1000";
String userJson = redisTemplate.opsForValue().get(key);if (userJson == null) {User user = userService.getById(1000L);if (user == null) {// 缓存一个占位符,防止穿透redisTemplate.opsForValue().set(key, "", 5, TimeUnit.MINUTES);} else {redisTemplate.opsForValue().set(key, toJson(user), 10, TimeUnit.MINUTES);}
}

🛠 实践样例:布隆过滤器(Guava)

BloomFilter<Long> filter = BloomFilter.create(Funnels.longFunnel(), 100_0000);
filter.put(12345L);if (!filter.mightContain(requestedId)) {return null; // 拦截非合法请求
}

🔥 4、缓存击穿(Cache Breakdown)

✅ 定义:

某个热点 key 失效瞬间,多个并发请求同时击中数据库。

🧨 触发场景:

🔹 热点数据过期,瞬时大量请求访问该 key。
🔹 并发场景下没有做好互斥更新控制。

✅ 解决方案:

方案实现方式
热点缓存永不过期主动更新替代被动过期
加互斥锁只有一个线程能加载数据,其余等待或返回旧值
异步更新缓存提前设置过期,后台刷新
多级缓存本地缓存兜底,如 Caffeine + Redis

🛠 实践样例:互斥锁方式防止击穿

public User getUserById(Long userId) {String key = "user:" + userId;String cache = redisTemplate.opsForValue().get(key);if (cache != null) return parseUser(cache);// 加锁防击穿String lockKey = "lock:user:" + userId;boolean lock = redisTemplate.opsForValue().setIfAbsent(lockKey, "1", 30, TimeUnit.SECONDS);if (!lock) {try { Thread.sleep(50); } catch (InterruptedException ignored) {}return getUserById(userId); // 递归重试}try {User user = db.queryById(userId);if (user != null) {redisTemplate.opsForValue().set(key, toJson(user), 10, TimeUnit.MINUTES);} else {redisTemplate.opsForValue().set(key, "", 3, TimeUnit.MINUTES);}return user;} finally {redisTemplate.delete(lockKey); // 释放锁}
}

🎯 5、总结

🔹 Redis 作为缓存层时,不应将其设计为单点依赖
🔹 搭配使用 Caffeine(本地)+ Redis(远程)+ MQ异步回源 是中大型系统推荐策略。
🔹 限流、熔断、降级 机制应作为系统稳定性的基本保障。

问题定义触发条件核心解决策略
雪崩批量缓存同时失效TTL 设置一致或 Redis 崩溃随机 TTL、本地缓存、限流
穿透请求的 key 无效缓存和数据库都无数据空值缓存、布隆过滤器、参数校验
击穿某一热点 key 失效突然大流量请求互斥锁、异步更新、热点永不过期

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

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

相关文章

前端-html+CSS基础到高级(二)html基础

一、 为什么需要Web标准 浏览器差异问题&#xff1a;五大主流浏览器&#xff08;IE、Chrome、Firefox、Safari等&#xff09;使用不同渲染引擎&#xff0c;导致相同代码解析效果存在差异。为什么需要Web标准&#xff1f;不同浏览器的渲染引擎不同&#xff0c;对于相同代码解析的…

前端-移动Web-day2

目录 1、空间-平移 2、视距 3、空间旋转-Z轴 4、空间旋转-X轴 5、空间旋转-Y轴 6、立体呈现 7、案例-3D导航 8、空间-缩放 9、动画-体验 10、动画-实现步骤 11、animation复合属性 12、animation拆分写法 13、案例-走马灯 14、精灵动画 15、多组动画 16、案例-…

力扣1116题:用C++实现多线程交替输出零、偶数、奇数

一、题目解读 力扣1116题要求设计一个类&#xff0c;实现三个线程交替输出数字&#xff1a;一个线程输出连续的0&#xff0c;一个线程输出连续的偶数&#xff0c;另一个线程输出连续的奇数。输入参数n为总输出次数&#xff08;每个线程各输出n次&#xff09;&#xff0c;输出需…

C语言(07)——原码 补码 反码 (超绝详细解释)

本文的内容通下面这篇文章有着紧密的联系&#xff0c;读者可以选择性阅读 C语言————二、八、十、十六进制的相互转换-CSDN博客 相关的C语言练习题和思维锻炼可以参考以下文章 C语言————练习题册&#xff08;答案版&#xff09;-CSDN博客 C语言————斐波那契数列…

磁盘坏道检测工具在美国服务器硬件维护中的使用规范

磁盘坏道检测工具在美国服务器硬件维护中的使用规范在服务器硬件维护领域&#xff0c;磁盘坏道检测工具是保障数据安全的第一道防线。本文将系统介绍美国数据中心环境下专业级磁盘诊断方案的实施标准&#xff0c;重点解析SMART检测、坏道修复算法与自动化运维流程的整合方法&am…

【n8n】如何跟着AI学习n8n【03】:HTTPRequest节点、Webhook节点、SMTP节点、mysql节点

前言 n8n的系统性学习&#xff0c;对各知识点地毯式学习&#x1f50d;~ 前面课程 定制n8n的AI老师&#xff0c;有AI老师制定学习大纲&#xff0c;参考之前的文档&#xff08;本系列n8n学习大纲&#xff0c;也在这里&#xff09;&#xff1a; 【n8n】如何跟着AI学习n8n_01&a…

Vue 的双向数据绑定原理

Vue 的双向数据绑定是通过 数据劫持 发布-订阅模式 实现的&#xff0c;具体分为以下三个关键机制&#xff1a;1. 数据劫持&#xff08;响应式系统&#xff09; Vue 使用 Object.defineProperty&#xff08;Vue 2&#xff09;或 Proxy&#xff08;Vue 3&#xff09;监听数据变化…

【基于C# + HALCON的工业视觉系统开发实战】三十五、金属表面划伤检测:强反光场景解决方案

摘要:针对金属表面强反光导致划伤检测准确率低的行业痛点,本文提出基于光度立体法的工业视觉检测方案。系统采用“硬件抗反光+算法重建”双策略,硬件上通过可编程分区环形光源、偏振镜头与高动态相机构建成像系统;算法上利用四方向光源序列图像重建表面法向量与高度场,实现…

为什么bert是双向transformer

BERT 是双向 Transformer&#xff0c;这是它的一个核心创新点。下面我从 技术原理、与传统 Transformer 的区别、以及双向性的实际意义 来详细解释为什么 BERT 被称为“双向 Transformer”。一、什么是 BERT 的“双向”&#xff1f;在 BERT 的论文中&#xff0c;双向的原文是 &…

vue中使用Canvas绘制波形图和频谱图(支持.pcm)

实现方式一&#xff1a; vue中使用wavesurfer.js绘制波形图和频谱图 安装colorMap&#xff1a; npm install --save colormap1、单个频谱图 效果&#xff1a; 源码&#xff1a; <template><div class"spectrogram-container"><canvas ref"ca…

【Python系列】Flask 应用中的主动垃圾回收

博客目录一、Python 内存管理基础二、Flask 中手动触发 GC 的基本方法三、高级 GC 策略实现1. 使用装饰器进行请求级别的 GC2. 定期 GC 的实现四、Flask 特有的 GC 集成方式1. 使用 teardown_request 钩子2. 结合应用上下文管理五、智能 GC 策略六、注意事项与最佳实践七、替代…

Linux和shell

最快入门的方式是使用苹果系统。此外&#xff0c;累计补充学习&#xff1a;一、目录结构/bin&#xff0c;二进制文件 /boot&#xff0c;启动文件 /dev&#xff0c;设备文件 /home&#xff0c;主目录&#xff0c;一般外接包、安装包放在这里 /lib&#xff0c;库文件 /opt&#x…

告别内存泄漏:你的Rust语言30天征服计划

欢迎踏上Rust学习之旅&#xff01;第一周&#xff1a;奠定基础 (Week 1: Laying the Foundation)第1天&#xff1a;环境搭建与 “Hello, World!”核心概念: 安装Rust工具链 (rustup)&#xff0c;它包含了编译器rustc和包管理器Cargo。Cargo是你的好朋友&#xff0c;用于创建项目…

乱删文件,电脑不能开机,怎么办

相信不少朋友在清理电脑、释放空间时&#xff0c;都做过一件“后悔一整年”的事——乱删系统文件。本来只是想让电脑快点、干净点&#xff0c;结果第二天一开机&#xff1a;黑屏了、蓝屏了、无限重启了&#xff0c;甚至连桌面都见不到了&#xff01;很多用户在删文件时&#xf…

ICODE SLIX2有密钥保护的物流跟踪、图书馆管理ISO15693标签读写Delphi源码

本示例使用设备&#xff1a;https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.6781645eXF3tm5&ftt&id959258149468 一、密钥认证 procedure TForm1.Button21Click(Sender: TObject); varctrlword:byte;passwordid:byte; //密钥类型status:byte; //存…

核环境特种机器人设备的抗辐照芯片选型方案

摘要&#xff1a;核能作为国家能源安全的重要组成部分&#xff0c;对工业自动化设备的稳定性和可靠性提出了极高的要求。机器人设备在涉核环境下的日常巡检、设备维护、应急响应等任务中发挥着不可替代的作用。然而&#xff0c;涉核环境&#xff0c;尤其是高能粒子的辐照效应&a…

Linux权限系统完全指南:从本质到安全实践

一、权限的本质&#xff1a;Linux安全的核心逻辑在Linux的多用户环境中&#xff0c;权限系统通过三个关键维度实现资源隔离&#xff1a;用户标识 (UID)&#xff1a;系统通过数字ID识别用户&#xff0c;root用户的UID固定为0组标识 (GID)&#xff1a;用户组机制实现批量权限管理…

养老院跌倒漏报率↓78%!陌讯多模态算法在智慧照护中的边缘计算优化

​摘要​​&#xff1a; 针对养老场景中复杂光照与遮挡导致的跌倒漏报问题&#xff0c;陌讯视觉算法通过多模态融合与边缘计算优化&#xff0c;实测显示在RK3588 NPU硬件上实现​​mAP0.5达89.3%​​&#xff0c;较基线模型提升28.5%&#xff0c;功耗降低至7.2W。本文解析其动态…

老年护理实训室建设方案:打造安全、规范、高效的实践教学核心平台

在老龄化社会加速发展的背景下&#xff0c;培养高素质、技能过硬的老年护理专业人才迫在眉睫。一个设计科学、功能完备的老年护理实训室&#xff0c;正是院校提升实践教学质量&#xff0c;对接行业需求的核心平台。本方案旨在构建一个安全、规范、高效的现代化实训环境。点击获…