Redis 缓存穿透、击穿、雪崩:问题与解决方案
在使用 Redis 作为缓存中间件时,系统可能会面临一些常见的问题,如 缓存穿透、缓存击穿 和 缓存雪崩。这些问题如果不加以解决,可能会导致数据库压力过大、系统响应变慢甚至崩溃。本文将详细分析这三种问题的起因,并提供有效的解决方案及其优缺点。
一、缓存穿透(Cache Penetration)
问题描述:
恶意请求查询数据库中不存在的数据,导致请求直接穿透缓存层直达数据库。当高并发发生时,可能压垮数据库。
解决方案对比
| 解决方案 | 实现方式 | 优点 | 缺点 |
|---|---|---|---|
| 布隆过滤器 | 使用位数组存储所有可能存在的key哈希值 | 内存占用极小(亿级数据约百MB) | 存在误判率(可配置0.1%-1%),不支持删除操作 |
| 空值缓存 | 对不存在的数据缓存NULL值(设置短TTL) | 实现简单,快速生效 | 可能被恶意攻击制造大量无效key,内存浪费 |
| 接口层校验 | 对请求参数进行格式/范围校验 | 有效拦截非法请求 | 需要明确业务规则,无法防御合法参数攻击 |
生产建议:
布隆过滤器(RedisBloom模块)+ 空值缓存组合使用,拦截99%的穿透攻击
二、缓存击穿(Cache Breakdown)
问题描述:
热点key突然失效,导致海量请求直接冲击数据库,常见于秒杀、爆款商品场景。
解决方案对比
| 解决方案 | 实现方式 | 优点 | 缺点 |
|---|---|---|---|
| 互斥锁(Mutex) | 使用Redis的SETNX实现分布式锁 | 保证数据强一致性 | 增加系统复杂度,锁等待影响吞吐量 |
| 逻辑过期时间 | 缓存永不过期,业务代码维护逻辑过期时间 | 避免锁竞争,性能优异 | 需要维护版本号,可能读到旧数据 |
| 永不过期策略 | 物理永不过期,异步更新缓存 | 彻底避免击穿问题 | 内存占用持续增长,需配套淘汰策略 |
三、缓存雪崩(Cache Avalanche)
问题描述:
大量key同时过期或Redis集群宕机,导致请求全部直达数据库。
解决方案对比
| 解决方案 | 实现方式 | 优点 | 缺点 |
|---|---|---|---|
| 随机时段过期 | 基础TTL + 随机数(如3600±600秒) | 实现简单,有效分散过期时间 | 需要根据业务调整随机时间窗口 |
| 多级缓存架构 | 本地缓存(Caffeine)+ Redis分级缓存 | 提升系统可用性级别 | 架构复杂度高,数据一致性维护成本增加 |
| 熔断降级 | 使用Hystrix等工具进行流量控制 | 保护数据库不被压垮 | 可能影响正常用户体验 |
| 集群高可用 | Redis Sentinel/Cluster部署 | 提升系统容灾能力 | 运维复杂度增加,硬件成本提高 |
监控指标:
-
缓存命中率低于80%触发预警
-
数据库QPS超过阈值自动熔断
四、综合解决方案推荐
生产环境推荐方案组合:
-
穿透防御:布隆过滤器(前置拦截)+ 空值缓存(兜底防护)
-
击穿防护:热点数据永不过期 + 互斥锁(双保险策略)
-
雪崩预防:分层缓存架构 + 随机过期时间 + Sentinel监控
架构设计要点:
-
数据一致性:采用canal监听binlog异步更新缓存
-
监控体系:Prometheus监控缓存命中率+数据库QPS
-
降级策略:配置动态开关,支持手动切换降级模式
不同业务场景需灵活选择方案,例如金融交易系统优先保证一致性,电商大促场景侧重高可用性。实际应用中建议通过压测验证方案有效性。
总结
缓存穿透、击穿和雪崩是使用 Redis 缓存时可能遇到的三大常见问题。通过合理的解决方案,可以有效避免这些问题,提升系统的稳定性和性能。
- 缓存穿透:推荐使用布隆过滤器结合空值缓存,有效拦截 99% 的穿透攻击。
- 缓存击穿:根据业务场景选择互斥锁或永不过期策略,确保热点数据的稳定性。
- 缓存雪崩:结合随机时段过期和多级缓存架构,分散缓存失效时间,提升系统可用性。
通过合理的解决方案和监控指标,可以有效避免这三类问题,提升系统的稳定性和性能。
希望本文可以帮助你在实际项目中解决这些问题,提升系统的可用性和性能!
相关文章:
Redis 缓存穿透、击穿、雪崩:问题与解决方案
在使用 Redis 作为缓存中间件时,系统可能会面临一些常见的问题,如 缓存穿透、缓存击穿 和 缓存雪崩。这些问题如果不加以解决,可能会导致数据库压力过大、系统响应变慢甚至崩溃。本文将详细分析这三种问题的起因,并提供有效的解决…...
第一个CMAKE项目hello cmake
#注意! 这篇文章是为WINDWOS用户写的 #请检查你的电脑上已经安装了MINGW和CMAKE 快速检查方法如下 C:\Users\Basicoperation>g --version g (x86_64-win32-seh-rev1, Built by MinGW-Builds project) 14.2.0 Copyright (C) 2024 Free Software Foundation, Inc. …...
骶骨神经
骶骨肿瘤手术后遗症是什么_39健康网_癌症 [健康之路]匠心仁术(七) 勇闯禁区 骶骨肿瘤切除术...
基于Django的购物商城平台的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
摘要 当今社会进入了科技进步、经济社会快速发展的新时代。国际信息和学术交流也不断加强,计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考方式也产生了变化。传统购物管理采取了人工的管理方法,但这种管理方法存…...
使用快捷键高效管理 VSCode:提升工作效率,告别鼠标操作
如果你想提高工作效率,减少鼠标操作,掌握键盘快捷键是一个非常有效的方式。在编程过程中,熟练使用快捷键能够快速管理文件、标签页,节省时间并提升效率。比如,Ctrl P 和 Ctrl W 可以快速打开和关闭文件,而…...
【找工作】C++和算法复习(自用)
文章目录 C头文件自定义排序函数stl 算法数据结构树状数组 数学 自用随便记录 C 排序 stl 头文件 全能头文件: #include<bits/stdc.h>自定义排序函数 bool compare(const int &odd1,const int &odd2) {return odd1>odd2; }stl 枚举map map&…...
大语言模型基础
简介 AI大模型是“人工智能预训练大模型”的简称,包含了“预训练”和“大模型”两层含义,二者结合产生了一种新的人工智能模式,即模型在大规模数据集上完成了预训练后无需微调,或仅需要少量数据的微调,就能直接支撑各类应用。AI大模型主要分为三类:大语言模型、CV大模型…...
深入浅出机器学习:概念、算法与实践
目录 引言 机器学习的基本概念 什么是机器学习 机器学习的基本要素 机器学习的主要类型 监督学习(Supervised Learning) 无监督学习(Unsupervised Learning) 强化学习(Reinforcement Learning) 机器…...
2024年国赛高教杯数学建模A题板凳龙闹元宵解题全过程文档及程序
2024年国赛高教杯数学建模 A题 板凳龙闹元宵 原题再现 “板凳龙”,又称“盘龙”,是浙闽地区的传统地方民俗文化活动。人们将少则几十条,多则上百条的板凳首尾相连,形成蜿蜒曲折的板凳龙。盘龙时,龙头在前领头&#x…...
老游戏回顾:d2
游戏中玩家创建属于自己的角色,在一片片暗黑大地上奔跑、杀敌、寻宝、成长,最终打败统治各个大陆的黑暗势力,拯救游戏中的各个种族。 《暗黑破坏神II》的制作团队包括编程小组、运动物体制作小组和背景制作小组。游戏设计很大程度上是开放的&…...
【深度学习】Pytorch的深入理解和研究
一、Pytorch核心理解 PyTorch 是一个灵活且强大的深度学习框架,广泛应用于研究和工业领域。要深入理解和研究 PyTorch,需要从其核心概念、底层机制以及高级功能入手。以下是对 PyTorch 的深入理解与研究的详细说明。 1. 概念 动态计算图(D…...
什么是 Vue 的自定义事件?如何触发和监听?
Vue 的自定义事件详解 什么是自定义事件? 在 Vue 中,自定义事件是组件之间通信的重要机制。自定义事件允许子组件向父组件发送消息,通常用于处理用户交互或异步操作的结果。这种机制使得组件间的通信更加灵活和解耦。 自定义事件的基本概念…...
windows上vscode cmake工程搭建
安装vscode插件: 1.按装fastc(主要是安装MinGW\mingw64比较方便) 2.安装C,cmake,cmake tools插件 3.准备工作完成之后,按F1,选择cmake:Quick Start就可以创建一个cmake工程。 4.设置Cmake: G…...
DEMF模型赋能多模态图像融合,助力肺癌高效分类
目录 论文创新点 实验设计 1. 可视化的研究设计 2. 样本选取和数据处理 3. 集成分类模型 4. 实验结果 5. 可视化结果 图表总结 可视化知识图谱 在肺癌早期筛查中,计算机断层扫描(CT)和正电子发射断层扫描(PET)作为两种关键的影像学手段,分别提供了丰富的解剖结构…...
Android:权限permission申请示例代码
Android应用项目每次最开始都要进行权限申请,贴一下权限申请的示例代码,方便后续Ctrl CV使用 1.AndroidManifest.xml 配置要申请的权限 <uses-permission android:name"android.permission.READ_CONTACTS" /> <uses-permission and…...
AI Agent Service Toolkit:一站式大模型智能体开发套件
项目简介 该工具包基于LangGraph、FastAPI和Streamlit构建,提供了构建和运行大模型Agent的最小原子能力,包含LangGraph代理、FastAPI服务、用于与服务交互的客户端以及一个使用客户端提供聊天界面的Streamlit应用。用户可以利用该工具包提供的模板快速搭建基于LangGraph框架…...
大数据SQL调优专题——Hive执行原理
引入 Apache Hive 是基于Hadoop的数据仓库工具,它可以使用SQL来读取、写入和管理存在分布式文件系统中的海量数据。在Hive中,HQL默认转换成MapReduce程序运行到Yarn集群中,大大降低了非Java开发者数据分析的门槛,并且Hive提供命令…...
Python程序打包 |《Python基础教程》第18章笔记
《Python基础教程》第1章笔记👉https://blog.csdn.net/holeer/article/details/143052930 第18章 程序打包 程序可以发布后,你可能想先将它打包。如果程序只包含一个.py文件,这可能不是问题。然而,如果用户不是程序员࿰…...
图论 之 迪斯科特拉算法求解最短路径
文章目录 题目743.网络延迟时间3341.到达最后一个房间的最少时间I 求解最短路径的问题,分为使用BFS和使用迪斯科特拉算法,这两种算法求解的范围是有区别的 BFS适合求解,边的权值都是1的图中的最短路径的问题 图论 之 BFS迪斯科特拉算法适合求…...
掌握Spring开发_常用注解详解
1. 前言 1.1 写作目的 本文旨在全面解析Spring框架中常用的注解,帮助开发者更好地理解和使用这些注解,提高开发效率和代码质量。Spring框架提供了丰富的注解,简化了依赖注入、AOP、事务管理、Web开发等多个方面的开发工作。通过本文的学习,读者可以掌握这些注解的使用方法…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
