Redis 的穿透、雪崩、击穿

Redis 的穿透、雪崩、击穿

1、缓存穿透

  • 定义

    • 缓存穿透是指查询一个不存在的数据,由于缓存中没有该数据,每次请求都会直接访问数据库,导致数据库压力过大
  • 产生原因

    • 恶意攻击:攻击者故意请求大量不存在的key,导致请求直接穿透到数据库中
    • 业务逻辑问题:用户查询的数据在数据库中也不存在(如查询不存在的商品ID)
    • 缓存未命中:缓存中存储相关数据,且数据库也没有,导致请求直接到达数据库
  • 解决方法

    1、布隆过滤器

    • 在缓存层前使用布隆过滤器,判断请求的key是否可能存在。如果布隆过滤器判断不存在,直接返回,减少对数据库的访问
    • 注意:布隆过滤器可能有误判(假阳性),但可以有效过滤大量无效请求

    2、缓存空值

    • 对于查询不存在的数据,将空值(如null)缓存到Redis中,并设置较短的过期时间(如30秒),避免重复穿透数据库

    3、参数校验

    • 在接口层对请求参数进行校验,过滤掉明显无效的请求(如负数ID、非法的查询参数)

    4、异步回填

    • 如果数据可能动态生成,可以异步触发数据生成逻辑,并缓存结果,防止频繁穿透

2、缓存雪崩

  • 定义
    • 缓存雪崩是指在某一个时刻,大量缓存key同时失效,或者Redis服务宕机,导致大量请求直接打到数据库,数据库无法承受高并发而崩溃
  • 产生原因
    • 缓存key集中失效:大量key设置了相同的过期时间,导致在同一时间点全部失效
    • Redis服务宕机:Redis集群不可用,所有请求直接访问数据库
    • 高并发场景:在缓存失效或不可用时,系统面临高并发请求,数据库不堪重负
  • 解决方法
    • 随机化过期时间
      • 在设置缓存过期时间时,添加随机偏移量(如在基础时间上加减几秒),避免大量key同时失效
    • 热点缓存时间延长
      • 对于热点数据,延长缓存时间,或设置为永不过期,定期异步更新
    • 高可用架构
      • 部署Redis集群(如主从复制、哨兵模式、Cluster模式),确保Redis服务高可用,防止单点故障
    • 降级与限流
      • 在数据库层实现限流机制(如通过Nginx或网关限制请求频率)
      • 提供降级方案,如返回默认值或提示用户稍后重试,减少数据库压力
    • 分布式锁
      • 在缓存失效时,使用分布式锁(如Redis锁或Zookeeper锁)限制同时访问数据库的线程数,防止数据库被压垮

3、缓存击穿

  • 定义

    • 缓存击穿是指某个热点key在失效的瞬间,大量并发请求同时访问该key,导致这些请求直接打到数据库上,造成数据库压力激增
  • 产生原因

    • 热点key失效:某个高频访问的key(如热门商品信息)在缓存中失效,且此时有大量并发请求
    • 高并发访问:热点数据失效后,大量线程同时查询数据库,导致数据库瞬间负载过高
  • 解决方法

    1、热点key永不过期

    • 对于热点数据,设置缓存永不过期,或通过异步任务定期刷新缓存内容

    2、分布式锁

    • 在缓存失效时,使用分布式锁(如redis的SEINX或Redisson)限制只有一个线程去查询数据库,其余线程等待缓存更新
    • 示例流程
      • 1、线程A发现缓存失效,尝试获取锁
      • 2、获取锁成功后,查询数据库并更新缓存
      • 3、其他线程等待锁释放后直接读取缓存

    3、异步加载

    • 在热点key接近失效时,提前异步触发缓存刷新,减少失效瞬间的请求压力

    4、热点隔离

    • 将热点数据单位存储到专用的Redis实例或本地缓存(如Caffeine、Guava Cache),降低对主数据库的冲击

总结对比

问题定义产生原因解决方法
缓存穿透查询不存在的数据,穿透到数据库恶意请求、数据不存在、缓存未命中布隆过滤器、缓存空值、参数校验
缓存雪崩大量 key 同时失效或服务宕机集中失效、Redis 宕机、高并发随机过期时间、高可用、限流降级
缓存击穿热点 key 失效,大量请求打到数据库热点 key 失效、高并发分布式锁、永不过期、异步刷新、热点隔离

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

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

相关文章

有道翻译官手机版:智能翻译,随行助手

在当今全球化的时代,语言不再是交流的障碍。无论是学习外语、出国旅游、商务出差还是日常交流,一款高效、准确的翻译软件都能成为我们的好帮手。有道翻译官手机版正是这样一款功能强大、操作便捷的语言翻译软件,它凭借先进的翻译技术和丰富的…

nuxt3 + vue3 分片上传组件全解析(大文件分片上传)

本文将详细介绍一个基于 Vue.js 的分片上传组件的设计与实现,该组件支持大文件分片上传进度显示等功能。 组件概述 这个上传组件主要包含以下功能: 支持大文件分片上传(默认5MB一个分片)支持文件哈希计算,用于文件唯一标识显示上传进度(整体和单个文件)支持自定义UI样…

正则表达式与C++

转自个人博客 1. 概述 1.1 正则表达式概述 正则表达式(Regular Expressions,简称 regex)是用于匹配文本模式的一种特殊字符序列,其可以用一系列字符来表示出不同文本的对应模式。正则表达式的应用范围十分广泛,包括验…

OpenCV CUDA模块设备层-----在 GPU上计算反双曲正切函数atanh()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 对输入的 uchar1 像素值(范围 [0, 255]),先归一化到 [0.0, 1.0] 浮点区间,然后计算其 反双曲正切…

抢占西南产业高地:入驻成都芯谷金融中心文化科技产业园的价值

入驻成都芯谷金融中心文化科技产业园,对企业而言具有显著的战略价值,主要体现在以下几个方面: 产业聚集效应与协同发展 产业链完善:成都芯谷聚焦集成电路、新型显示、人工智能等核心产业,入驻企业可享受完善的产业链…

领域驱动设计(DDD)【2】之项目启动与DDD基本开发流程

文章目录 一 项目背景与目标二 核心需求分析初步需求详细分析需求总结表 三 DDD核心概念与开发流程领域和领域专家领域驱动设计开发流程 四 潜在扩展需求 一 项目背景与目标 项目定位 开发基于SaaS的企业管理系统,聚焦软件服务企业的细分市场,功能需求包…

深度融合数智化,百胜软件联合华为云加速零售行业转型升级

当前,企业数字化转型纵深推进,满足企业数智化全阶段、全场景的需求变得尤为关键。为此,华为云携手上万家伙伴共同发起第三届828 B2B企业节,依托云底座为企业数智化供需“架桥”“铺路”,加速企业智改数转,助…

《HTTP权威指南》 第4章 连接管理

带着问题学习(通常是面试考点) HTTP是如何使用TCP连接的TCP连接的时延、瓶颈及存在的障碍HTTP的优化,包括并行连接、keep-alive(持久连接)和管道化连接管理连接时应该和不应该做的事 TCP连接 TCP的数据通过IP分组&am…

StartUML入门级使用教程——画Class类图

一、破解安装StartUML StarUML建模工具最新版破解安装详细教程https://blog.csdn.net/m0_74146638/article/details/148709643?spm1001.2014.3001.5502 二、类图实战 1.主界面 ​ 默认打开starUML后,会默认进入类图模式,各模块区域功能如下&#x…

中科亿海微SoM模组——FPGA+DSP核心板

FPGADSP核心板是基于中科亿海微EQ6HL130型FPGA芯片搭配国产DSP开发的高性能核心板卡。对外接口采取邮票孔连接方式,可以极大提高信号传输质量和焊接后的机械强度。核心板卡的系统框图如下图所示。 图 FPGADSP核心板系统框图 FPGA采用中科亿海微136K LUT资源EQ6HL130…

CentOS 7 虚拟机网络配置异常 典型问题:启动了NetworkManager但是network无法启动

问题背景 在 VMware 虚拟机中使用 CentOS 7 时,出现以下网络问题: 命令行重启网络服务失败,提示 RTNETLINK answers: File exists 等冲突错误图形界面网络设置无法打开,提示需要启动 NetworkManager网卡 ens33 无法获取 IPv4 地…

细节/数学/滑动窗口

题目意思: 判断字符串是否可以按照题目条件缩短。 思路: 用栈的思想写,对每一次的大小写都进行滚动判断。 tips: 这里面要注意的东西就有一点多了,首先是字符串的遍历问题auto更方便,其次是对小写和大…

WebeServer实现:学到了哪些东西

前言 这里话就是总结一下之前没讲过的一些东西 系统调用 accept与accept4   当我们调用accept接收一个新的fd的时候,往往需要在调用fcntl将这个fd变成非阻塞IO,那么有没有一个系统调用可以一次性做完这两件事呢,有的有的就是accept4. // accept 函数…

React 虚拟dom

JSX创建出ReactElement对象 最终形成一个JS树 将React.createElement对象转为真实DOM的方法使用render函数 为什么要虚拟 dom 状态难以跟踪 ## 操作真实dom开销大 ,并且操作会引起频繁的回流和重绘,并且不涉及批处理 声明式编程 从虚拟dom向真实dom去…

Spring MVC异常处理机制

Spring MVC提供了多种异常处理机制,以下是核心处理方式及实现方法: 一、局部异常处理(Controller级别) @ExceptionHandler注解 在Controller内部定义异常处理方法,捕获当前控制器抛出的指定异常。@Controller public class UserController {@GetMapping("/test"…

MySQL 8.x配置MGR高可用+ProxySQL读写分离(一):MGR构建MySQL高可用

#作者:stackofumbrella 文章目录 简介MGR优点MGR缺点MGR适用场景单主模式和多主模式组复制介绍组复制插件架构图单主模式多主模式配置主机名解析安装MGR插件 MGR故障转移恢复MGR集群 简介 MGR(MySQL Group Replication)是MySQL 5.7.17版本诞…

保安员证考试的理论知识部分,重点考查的法律法规具体有哪些?

保安员证考试理论知识部分,重点考查的法律法规主要有以下几种: 《保安服务管理条例》:作为保安行业的专门法规,是考试核心。重点考查保安服务活动规范,如保安服务的范围、资质要求等;保安员的权利与义务&am…

【好用但慎用】Windows 系统中将所有 WSL 发行版从 C 盘迁移到 非系统 盘的完整笔记(附 异常处理)

🚀 将所有 WSL 发行版从 C 盘迁移到 I 盘的完整教程(含 Podman / NVIDIA Workbench / Ubuntu 等) 【无标题】使用 Chocolatey 安装 WSL 管理工具 LxRunOffline-CSDN博客 免责声明 重要提示 在执行 WSL 迁移操作前,请务必仔细阅读…

Oracle APEX 通过rtf模板下载PDF文件(BIP)

1. 上传模板文件 共享组件 > 报表布局 2. 编写SQL文 共享组件 > 报表查询 报表布局中选择1中设置完的报表布局,然后编写SQL文提供数据 3. 添加下载按钮 在页中添加一个下载按钮,添加动态操作,选择打印报告 4. 下载PDF文件 点击Pri…

Web Seach 搜索 MCP 启动!

🚀 开启你的 AI 助手搜索能力!开源 Web 搜索 MCP 服务器上线! 在 ChatGPT、Claude 等 AI 工具成为生产力新核心的今天,我们往往面临一个尴尬的问题:模型不知道最新的网络信息。虽然 GPT-4o 和 Claude 支持联网功能&am…