Redis 中的缓存击穿、缓存穿透和缓存雪崩是什么?

在 Redis 中,缓存击穿、缓存穿透和缓存雪崩是常见的缓存问题,它们都会影响系统的性能和稳定性。以下是针对这三个问题的详细解释:

一、缓存击穿(Cache Breakdown)

定义:缓存击穿是指某个热点数据在缓存中过期或不存在,而此时有大量并发请求同时访问该数据。由于缓存中没有该数据,所有请求都会直接落到数据库上,导致数据库压力骤增,甚至可能引发数据库宕机。

特点

  • 并发性:大量并发请求同时访问同一个热点数据。
  • 数据热点:被访问的数据是热点数据,即经常被访问的数据。
  • 缓存失效:缓存中的数据恰好过期或不存在。

解决方案

  • 互斥锁:在访问数据库之前,先获取一个互斥锁。如果获取成功,则访问数据库并更新缓存;如果获取失败,则等待一段时间后重试。这样可以确保同一时间只有一个请求能够访问数据库,避免并发请求对数据库造成过大压力。
  • 永不过期:为热点数据设置一个较长的过期时间或根本不设置过期时间,从而避免缓存过期导致的问题。但这种方法可能会占用较多的缓存空间,且当数据需要更新时,需要手动或通过其他机制来更新缓存。
  • 逻辑过期:在缓存中设置数据的逻辑过期时间,而不是实际的过期时间。当访问数据时,先检查逻辑过期时间,如果已过期,则异步更新缓存,同时返回旧数据给客户端。这样可以减少对数据库的直接访问。

二、缓存穿透(Cache Penetration)

定义:缓存穿透是指查询一个在缓存和数据库中都不存在的数据。由于缓存中没有该数据,所有请求都会直接落到数据库上,导致数据库压力骤增。与缓存击穿不同的是,缓存穿透通常是由恶意攻击或程序错误导致的,攻击者可能故意查询不存在的数据来耗尽数据库资源。

特点

  • 数据不存在:查询的数据在缓存和数据库中都不存在。
  • 大量请求:大量并发请求同时查询不存在的数据。
  • 恶意攻击:可能是由恶意攻击或程序错误导致的。

解决方案

  • 缓存空值:当查询一个不存在的数据时,将该空值也缓存起来,并设置一个较短的过期时间。这样,在过期时间内再次查询该数据时,就可以直接从缓存中返回空值,而不需要访问数据库。
  • 布隆过滤器:使用布隆过滤器来过滤掉不存在的数据请求。布隆过滤器是一种空间效率极高的概率型数据结构,可以判断一个元素是否存在于集合中。虽然存在一定的误判率,但可以通过调整参数来降低误判率。
  • 接口校验:在访问数据库之前,先对请求进行校验,过滤掉明显不合法的请求。

三、缓存雪崩(Cache Avalanche)

定义:缓存雪崩是指大量缓存数据在同一时间过期或缓存服务器宕机,导致大量请求直接落到数据库上,造成数据库压力骤增甚至宕机。缓存雪崩通常是由于缓存数据的过期时间设置过于集中或缓存服务器故障导致的。

特点

  • 大量数据过期:大量缓存数据在同一时间过期。
  • 缓存服务器故障:缓存服务器宕机或不可用。
  • 请求激增:大量请求直接落到数据库上,导致数据库压力骤增。

解决方案

  • 过期时间分散:为缓存数据设置不同的过期时间,避免大量数据在同一时间过期。可以使用随机数或哈希算法来分散过期时间。
  • 高可用缓存集群:搭建高可用的缓存集群,确保缓存服务器的高可用性。可以使用 Redis Sentinel 或 Redis Cluster 等技术来实现。
  • 限流与降级:在缓存服务不可用时,通过限流和降级策略来减少对数据库的冲击。例如,可以限制访问数据库的并发数,或者返回预设的降级数据。
  • 多级缓存:引入多级缓存机制,如本地缓存(如 Ehcache)与分布式缓存(如 Redis)相结合,提高缓存的可用性和响应速度。

总结

  • 缓存击穿:针对热点数据缓存过期或不存在时,大量请求直接访问数据库。解决方案包括互斥锁、永不过期、逻辑过期等。
  • 缓存穿透:查询不存在的数据,导致大量请求直接访问数据库。解决方案包括缓存空值、布隆过滤器、接口校验等。
  • 缓存雪崩:大量缓存数据过期或缓存服务器故障,导致大量请求直接落到数据库上。解决方案包括过期时间分散、高可用缓存集群、限流与降级等。

在实际应用中,应根据具体情况选择合适的解决方案,并结合监控和告警机制,及时发现并处理缓存问题,确保系统的稳定性和性能。

我正在程序员刷题神器面试鸭上高效准备面试,9000+ 高频面试真题、800 万字优质题解,覆盖主流编程方向,跟我一起刷原题、过面试:
点击进入

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

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

相关文章

RabbitMQ配置环境变量

一、RabbitMQ下载 1、从官网下载 在官网中下载,适合自己电脑的版本。我直接下载的windows版本。 然后下载opt这个软件这个版本适合3.6.3的RabbitMQ,点击蓝色的字体即可下载。 2、安装erlang 当你双击安装程序并进入安装向导后,会看到这样…

基于vue框架的东莞市二手相机交易管理系统5yz0u(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能:用户,相机分类,二手相机 开题报告内容 基于FlaskVue框架的东莞市二手相机交易管理系统开题报告 一、研究背景与意义 1.1 研究背景 随着数字技术的迅猛发展和摄影文化的广泛普及,相机已成为人们记录生活、表达创意的重要工…

dify调用Streamable HTTP MCP应用

一、概述 上一篇文章,介绍了使用python开发Streamable HTTP MCP应用,链接:https://www.cnblogs.com/xiao987334176/p/18872195 接下来介绍dify如何调用MCP 二、插件 安装插件 需要安装2个插件,分别是:Agent 策略(支持 …

笔记:将一个文件服务器上的文件(一个返回文件数据的url)作为另一个http接口的请求参数

笔记:将一个文件服务器上的文件(一个返回文件数据的url)作为另一个http接口的请求参数 最近有这么个需求,需要往某一个业务的外部接口上传文件信息,但是现在没有现成的文件,只在数据库存了对应的url&#…

如何在 FastAPI 中合理使用 Pydantic 的 Alias

下面的内容是我跟 Gemini 2.5 Pro 探讨关于Pydantic 的 Alias 问题之后,让它总结的一篇技术博客。 我已经有很长一段时间没有好好写技术类的博客了,这就是原因。 可以在 https://panzhixiang.cn/ 查看更多我的博客,有技术的,也有很…

CAU人工智能class4 批次归一化

归一化 在对输入数据进行预处理时会用到归一化,将输入数据的范围收缩到0到1之间,这有利于避免纲量对模型训练产生的影响。 但当模型过深时会产生下述问题: 当一个学习系统的输入分布发生变化时,这种现象称之为“内部协变量偏移”…

动态库和静态库详解

库其实就是个文件 下面是文件后缀 静态库:.a(linux) .lib(windows) 动态库:.so(linux) .dll(windows) 静态库的制作 ar -rc libmystdio.a my_stdio.o my_string.o ar是归档工具,rc表示replace和create,ar跟tar有点…

PDF 文档结构化工具对比:Marker 与 MinerU

模型训练数据-MinerU一款Pdf转Markdown软件 https://codeyuan.blog.csdn.net/article/details/144315141 在当前大模型(LLM)和自然语言处理(NLP)应用快速发展的背景下,如何高效地将 PDF 等非结构化文档转换为结构化数…

shp2pgsql 导入 Shp 到 PostGIS 空间数据库

前言 ❝ shp2pgsql是PostGIS自带的命令行工具,用于将Shapefile文件声称SQL脚本导入到PostGIS空间数据库。 1. 安装 PostGIS 通过Application Stack Builder或者下载单独的PostGIS包进行安装。而shp2pgsql则是与PostGIS工具集成在一起,无需单独下载。该命…

【ISP算法精粹】什么是global tone mapping和local tone mapping?

1. 简介 全局色调映射(Global Tone Mapping)和局部色调映射(Local Tone Mapping)是高动态范围(HDR)图像处理中的两种关键技术,用于将高动态范围图像的亮度值映射到标准动态范围(LDR…

虚拟环境中VSCode运行jupyter文件

用VS Code打开jupyter文件,点击右上角 Select Kernel 在正上方会出现这个选择框,选择 Python Environment 会出来所有的虚拟环境,选择要用的环境行

如何计算VLLM本地部署Qwen3-4B的GPU最小配置应该是多少?多人并发访问本地大模型的GPU配置应该怎么分配?

本文一定要阅读我上篇文章!!! 超详细VLLM框架部署qwen3-4B加混合推理探索!!!-CSDN博客 本文是基于上篇文章遗留下的问题进行说明的。 一、本文解决的问题 问题1:我明明只部署了qwen3-4B的模型…

antv/g6 图谱封装配置(二)

继上次实现图谱后,后续发现如果要继续加入不同样式的图谱实现起来太过麻烦,因此考虑将配置项全部提取封装到js文件中,图谱组件只专注于实现各种不同的组件,其中主要封装的点就是各个节点的横坐标(x),纵坐标…

从芯片互连到机器人革命:英伟达双线出击,NVLink开放生态+GR00T模型定义AI计算新时代

5月19日,在台湾举办的Computex 2025上,英伟达推出新技术“NVLink Fusion”,允许非英伟达CPU和GPU,同英伟达产品以及高速GPU互连技术NVLink结合使用,加速AI芯片连接。新技术的推出旨在保持英伟达在人工智能开发和计算领…

Qt window frame + windowTitle + windowIcon属性(3)

文章目录 window frame属性window frame的概念1. window frame的影响2. 图片演示3. 代码演示 API接口widget.cpp(测试代码) windowTitle属性API接口问题 注意点widget.cpp(属性用法) windowIcon属性API接口啥是窗口图标玩法1. 先…

Git 分支管理:merge、rebase、cherry-pick 的用法与规范

Git 分支管理:merge、rebase、cherry-pick 的用法与规范 在团队开发和个人项目中,合理管理 Git 分支至关重要。merge、rebase 和 cherry-pick 是最常用的三种分支操作命令。本文将介绍它们的基本用法、适用场景及最佳实践规范,帮助大家更高效…

VR全景制作方法都有哪些?需要注意什么?

VR全景制作是将线下实景场景转化为具有沉浸式体验的全景图像的相关技术流程。通过图像处理和软件拼接等手段及技术,可以制作出VR全景图。后面,我们科普详细的VR全景制作方法指南,顺便介绍众趣科技在相关领域提供的支持方案。 选定拍摄地点与准…

计算机系统结构1-3章节 期末背诵内容

Amdahl定律: 加快某部件执行速度所能获得的系统性能加速比,受限于该部件的执行时间占系统中总执行时间的百分比。 加速比依赖于: 可改进比例:在改进前的系统中,可改进部分的执行时间在总的执行时间中所占的比例。 部件加速比:可改…

JS实现直接下载PDF文件

pdf文件通过a标签直接下载会打开页面,所以,请求该文件的blob文件流数据,再通过window.URL.createObjectURL转成链接,就可以直接下载了。 只需要替换url和文件名称就行,文件名的后缀记得要写上pdf,不然会变成…

深度解析Pytest中Fixture机制与实战案例

一、为什么我们需要Fixture? 在某次金融系统重构项目中,我们的测试团队曾遇到这样的困境:随着测试用例增长到500,使用unittest框架编写的测试代码出现了严重的维护问题——setup方法臃肿不堪,测试数据混乱&#xff0c…