Redis缓存三大经典问题:雪崩、穿透、击穿详解

        在高并发系统中,Redis作为高性能的内存缓存数据库,缓存可能会引发一系列严重问题——缓存雪崩、缓存穿透、缓存击穿

一、缓存雪崩(Cache Avalanche)

1. 什么是缓存雪崩?

        缓存雪崩是指大量缓存数据在同一时间集中失效,导致所有请求直接打到后端数据库,数据库瞬间承受巨大压力,甚至可能被压垮。

2. 典型场景

缓存服务器宕机或重启。

大量热点数据设置了相同的过期时间,同时失效。

Redis集群出现网络分区或主从切换失败。

3. 解决方案

设置不同的过期时间

        避免所有缓存同时失效。可以在基础过期时间上增加一个随机值。

多级缓存架构

        使用 本地缓存 + Redis 的多级缓存策略。即使Redis失效,本地缓存仍可缓解部分压力。

服务降级与熔断

        当数据库压力过大时,可临时返回默认值或友好提示,保护核心服务。

高可用部署

        Redis使用主从 + 哨兵Redis Cluster集群模式。

        数据持久化(RDB+AOF)防止数据丢失。

预热缓存

        系统上线或重启后,提前加载热点数据到缓存,避免冷启动时直接冲击数据库。

二、缓存穿透

1. 什么是缓存穿透?

        缓存穿透是指查询一个数据库中根本不存在的数据,由于缓存中没有,每次请求都会穿过缓存直达数据库,导致数据库压力剧增。

2. 攻击场景

        恶意用户或爬虫频繁查询不存在的ID,造成数据库负载飙升。

3. 解决方案

缓存空值

        即使查询结果为空,也缓存一个特殊值(如 null"empty"),并设置较短过期时间。

布隆过滤器

在访问缓存前,先通过布隆过滤器判断数据是否存在。

        优点:空间效率高,查询速度快。

        缺点:存在极低的误判率(可能把不存在的判为存在),但不会漏判。

接口层校验

        对请求参数进行合法性校验,如ID格式、范围限制、权限验证等,提前拦截非法请求。

三、缓存击穿

1. 什么是缓存击穿?

        缓存击穿是指某个热点数据在缓存中过期的瞬间,大量并发请求同时涌入,直接访问数据库,造成数据库瞬时压力激增。

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

2. 典型场景

        突发新闻、秒杀商品、热门视频等热点数据过期。

        高并发下多个线程同时发现缓存失效,同时查询数据库。

3. 解决方案

互斥锁

        当缓存失效时,只允许一个线程去加载数据库,其他线程等待。

逻辑过期

        不设置Redis的物理过期时间,而是将过期时间作为数据的一部分存储:

永不过期(慎用)

        对极端热点数据设置永不过期,通过后台任务定期更新缓存。

四、总结

问题触发条件影响范围解决方案
缓存雪崩大量key同时失效全局性,系统级风险随机过期时间、多级缓存、高可用
缓存穿透查询不存在的数据针对特定非法请求缓存空值、布隆过滤器、参数校验
缓存击穿热点key失效瞬间单个热点数据互斥锁、逻辑过期、永不过期

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

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

相关文章

后端Web实战-删除修改

目录 1.删除员工 1.1.1 需求 1.1.2 接口文档 1.1.3 思路分析 1.1.4 功能开发 1.1.4.1 Controller接收参数 1.1.4.2 Service 1.1.4.3 Mapper 1.1.5 功能测试 1.1.6 前后端联调 2.修改员工 2.1 查询回显 2.1.1 接口文档 2.1.2 实现思路 2.1.3 代码实现 2.1.4 方式…

VNC连接服务器实现远程桌面-针对官方给的链接已经失效问题

按照官方给的链接在安装包的时候找不到链接,原链接可能已经失效新链接# 下载 libjpeg-turbo 官方 debwget --no-proxy "https://sourceforge.net/projects/libjpeg-turbo/files/2.0.90%20(2.1%20beta1)/libjpeg-turbo-official_2.0.90_amd64.deb/download"…

Docker在Windows与Linux系统安装的一体化教学设计

Docker跨平台安装实训课程设计 一、课程定位 本实训课程面向计算机应用技术、云计算技术与应用等专业学生,通过对比学习Docker在Windows和Linux两大主流操作系统上的安装与配置方法,帮助学生掌握容器化技术的基础环境搭建能力,为后续的容器管…

c++多线程(1)------创建和管理线程td::thread

操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 算法描述 std::thread 是 C11 标准库中用于创建和管理线程的核心类,定义在 头文件中。它使得多线程编程变得简单、类型安全且跨平台。 一、std::thread 简介 std::thread 是一个类…

Flutter环境搭建全攻略之-windows环境搭建

一,Flutter 官网:https://flutter.dev Flutter Packages官网:https://pub.dev 二,Windows 上面搭建Flutter Android运行环境 对应软件可以联系客服,或者网盘里面下载 1,Flutter Android环境搭建&#xff1a…

《Docker 零基础入门到实战:容器化部署如此简单,运维效率直接拉满》

相信你对封面图上的「Docker 鲸鱼」图标并不陌生 —— 它正是解决「开发环境能跑,生产环境崩了」的容器化神器!Docker 通过打包应用与依赖到轻量容器,实现了「一次构建,到处运行」,彻底消除环境不一致的痛点。本文从 D…

Spring Security 深度学习(六): RESTful API 安全与 JWT

目录 1. 引言:无状态认证的崛起2. JWT (JSON Web Token) 核心概念2.1 什么是JWT?2.2 JWT的组成:Header, Payload, Signature2.3 JWT的工作原理2.4 JWT的优缺点与适用场景 3. Spring Security中的JWT集成策略3.1 禁用Session管理与CSRF防护3.2…

无名信号量

include <myhead.h> oid *task( void *file_size)int file_size1*(int*)file_size;//打开源文件int fdopen("./hello",O_RDONLY);if(fd-1){perror("open error\n");return NULL;}//打开目标文件int fd1open("./world",O_WRONLY);if(fd1-1)…

免费CRM系统与Excel客户管理的区别

很多中小企业在客户管理初期&#xff0c;会选择使用Excel表格进行客户数据的整理与维护。但随着业务规模扩大&#xff0c;客户信息日益复杂&#xff0c;Excel逐渐暴露出诸多局限性。此时&#xff0c;免费CRM系统应运而生&#xff0c;成为企业客户管理升级的重要选择。本文将深入…

linux Nginx服务配置介绍,和配置流程

1、Nginx 配置介绍认识Nginx服务的主配置文件 nginx.confnginx的配置文件一般在 /usr/local/nginx/conf/下&#xff0c;然后直接vim nginx.com 即可编辑1.1 全局配置介绍全局配置位于主配置文件最顶部&#xff0c;作用于整个Nginx服务进程&#xff0c;影响服务的资源分配、运行…

文字识别接口-文字识别技术-ocr api

文字识别接口&#xff0c;顾名思义&#xff0c;就是一种将图像文字或手写文字转换为可编辑文本的技术。文字识别接口&#xff0c;基于深度学习算法与自主ocr核心实现多种场景字符的高精度识别与结构化信息提取&#xff0c;现已被广泛应用于银行、医疗、财会、教育等多个领域。随…

DeepSeek R1大模型微调实战-llama-factory的模型下载与训练

文章目录概要1.下载模型2.llama factory 训练模型2.1 模型微调2.2 模型评估2.3 模型对话2.4 导出模型3.硬件选择概要 LLaMA Factory 是一个简单易用且高效的大型语言模型训练与微调平台。通过它&#xff0c;用户可以在无需编写任何代码的前提下&#xff0c;在本地完成上百种预…

C++ map和set

C参考文献&#xff1a;cplusplus.com - The C Resources Network 目录 一、序列式容器和关联式容器 二、set系列 &#xff08;1&#xff09;set类的介绍 &#xff08;2&#xff09;set的构造和迭代器 &#xff08;3&#xff09;set的接口 1.insert​编辑 2.find和erase 3…

头一次见问这么多kafka的问题

分享一篇粉丝朋友整理的面经&#xff0c;第一次遇见问那么多kafka的问题&#xff0c;看看他是怎么回答的。 先来看看 职位描述&#xff1a; 岗位职责&#xff1a; 负责基于 Go 的后端服务的设计、开发和维护&#xff1b;参与系统架构设计&#xff0c;确保系统的高可用性、高性能…

自底向上了解CPU的运算

文章目录 引言 CPU如何实现逻辑运算 NMOS和PMOS 基于MOS管组合下的逻辑门运算 逻辑运算下运算的实现 ALU的诞生 CPU的诞生 关于二进制运算的研究 十进制转二进制基础换算 为什么负数要使用补码进行表示 为什么反码就能解决正负数相加问题,我们还需要用补码来表示负数呢? 小数…

apache poi与Office Open XML关系

以下内容来自AI https://ecma-international.org/publications-and-standards/standards/ecma-376/ 官方规范 https://poi.apache.org/components/oxml4j/index.html java中针对Office Open XML的实现 Apache poi中各个组件 https://poi.apache.org/components/index.html …

S32K328上芯片内部RTC的使用和唤醒配置

1&#xff1a;RTC介绍 1.1 RTC基础功能介绍 参考《S32K3xx Reference Manual》&#xff0c;S32K328芯片内部自带RTC功能&#xff0c;并且支持从低功耗状态下唤醒设备&#xff1b;1.2 RTC电源介绍 由以下三张图可知 1&#xff1a;RTC由V11供电&#xff0c;V11依赖外部V15供电&am…

【Python】数据可视化之分类图

目录 条形图 箱形图 散点图 分簇散点图 小提琴 分簇小提琴 条形图 条形图是一种直观的图表形式&#xff0c;它通过不同长度的矩形条&#xff08;即“条形”&#xff09;来展示数值变量的中心趋势估计值&#xff0c;其中每个矩形的高度直接对应于该组数据的某个中心量度&…

RabbitMQ模型详解与常见问题

项目demo地址&#xff1a;https://github.com/tian-qingzhao/rabbitmq-demo 一、RabbitMQ组件概念 1.1 Server&#xff1a;接收客户端的连接&#xff0c;实现AMQP实体服务。 1.2 Connection&#xff1a;连接 应用程序与Server的网络连接&#xff0c;TCP连接。 1.3 Channel&…

网络:相比于HTTP,HTTPS协议到底安全在哪?

网络&#xff1a;相比于HTTP&#xff0c;HTTPS协议到底安全在哪&#xff1f; 我们知道HTTPS也是一种应用层协议&#xff0c;它在HTTP的基础上有一层加密&#xff0c;因为HTTP的数据传输都是以明文方式传输的&#xff0c;所以加密主要是为了防止数据在传输的时候被篡改 今天我…