缓存穿透,缓存击穿和缓存雪崩的区别以及解决方案

news/2025/2/13 10:37:55/文章来源:https://www.cnblogs.com/luolin-cn/p/18712624

1. 概述

在高并发系统中,缓存是提升性能、降低数据库压力的重要组件。然而,在实际应用中,缓存可能会遇到三种典型问题:缓存穿透缓存击穿缓存雪崩。这些问题如果不加以妥善处理,可能会导致数据库负载激增,甚至影响整个系统的稳定性。本文将详细介绍这三种问题的区别,并探讨相应的解决方案。

2. 什么是缓存穿透、缓存击穿和缓存雪崩?

2.1 缓存穿透(Cache Penetration)

现象:指的是缓存和数据库中都没有的数据,但却被大量请求访问,导致请求直接落到数据库上,增加数据库的压力。

速记口诀恶意请求绕过缓存,访问数据库中不存在的数据,导致数据库负载增加。

2.2 缓存击穿(Cache Breakdown)

现象:某个热点数据在缓存中过期的瞬间,刚好有大量请求同时到达,此时所有请求都会直接访问数据库,可能会导致数据库压力激增。

速记口诀缓存数据突然失效,大量请求瞬间涌向数据库。

2.3 缓存雪崩(Cache Avalanche)

现象大量缓存在同一时间过期,使得所有原本应命中缓存的请求都直接访问数据库,造成数据库负载飙升,甚至引发全局性故障。

速记口诀大量缓存同时失效,流量直击数据库,引发系统风险。

3. 解决方案

3.1 缓存穿透解决方案

方案 1:使用布隆过滤器(Bloom Filter)

  • 在缓存层引入布隆过滤器,提前存储可能存在的数据标识,对于不存在的数据,直接拦截请求,避免打到数据库。

方案 2:缓存空值

  • 针对数据库和缓存均不存在的数据,可以在缓存中存储一个短时间有效的空值(如 5 分钟),减少对数据库的冲击。

3.2 缓存击穿解决方案

方案 1:设置热点数据永不过期

  • 对于高频访问的热点数据,可以设置永不过期,确保缓存始终存在,避免瞬间失效造成数据库负载激增。

方案 2:互斥锁机制

  • 在缓存数据为空时,采用互斥锁(如 setnx 方式),确保只有一个请求能查询数据库并更新缓存,其他请求需等待或短暂休眠后重试。
public static String getProductDescById(String id) {String desc = redis.get(id);if (desc == null) {if (redis.setnx("lock_id", 1, 60) == 1) {try {desc = getFromDB(id);redis.set(id, desc, 60 * 60 * 24);} catch (Exception ex) {LogHelper.error(ex);} finally {redis.del("lock_id");return desc;}} else {Thread.sleep(200);return getProductDescById(id);}}return desc;
}

3.3 缓存雪崩解决方案

方案 1:设置缓存过期时间随机化

  • 避免大量缓存同时过期,可以在设定缓存时增加一个随机波动值。例如,原定 10 分钟 过期的缓存,可以随机增加 1~3 分钟,使过期时间分布在 7~13 分钟 之间。
redis.set(id, value, 60 * 60 + Math.random() * 1000);

方案 2:热点数据分片存储

  • 通过分布式缓存架构(如 Redis Cluster),将不同热点数据分布存储在不同的节点/机房,防止单点故障引发缓存雪崩。

方案 3:双层缓存机制(A/B 缓存)

  • 维护两层缓存:A 缓存(正常过期)B 缓存(不过期)。当 A 缓存失效时,读取 B 缓存,并异步更新 **A** 缓存,确保数据一致性。

4. 总结

问题 定义 触发条件 影响 解决方案
缓存穿透 访问数据库中不存在的数据,导致所有请求直接打到数据库 缓存和数据库都无数据 数据库负载增加 布隆过滤器、缓存空值
缓存击穿 热点数据过期的瞬间,大量请求同时访问数据库 高并发下,某个热点数据突然失效 数据库瞬时压力飙升 设置永不过期、互斥锁机制
缓存雪崩 大量缓存数据同时过期,导致数据库负载剧增 大量缓存数据设定相同的过期时间 可能影响整个系统 随机化过期时间、热点数据分片、双层缓存

缓存作为高并发架构中的重要组成部分,合理的缓存设计可以极大提升系统的性能,降低数据库负载。然而,面对缓存穿透、缓存击穿和缓存雪崩等问题,我们需要根据具体场景采取相应的防范措施,确保系统的稳定性和可靠性。

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

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

相关文章

MINE类型

1、什么是MIME类型MIME(Multipurpose Internet Mail Extensions)类型是在互联网上用于标识文件类型的标准方式。它在很多应用中得到了广泛的应用,例如电子邮件、Web浏览器和Web服务器等。MIME类型是由两部分组成的,第一部分是媒体类型(media type),用来表示文件的大类别…

解决微信小程序原生云开发退款报错“特约子商户商户号未授权服务商的产品权限”的问题

背景:微信小程序云开发支付没问题,退款时就会报这个错。 现象: 解决方法流程: 1、打开微信小程序开发者工具上面的云开发界面: 2、进入设置: 3、其他设置: 需要授权退款API权限,我这里已经授权了,未授权的话会有授权按钮,点击后会提示等待商户审核 4、我们来到微信支…

探索ChatGPT背后的前端黑科技

由于图片和格式解析问题,可前往 阅读原文在人工智能与互联网技术飞速发展的今天,像ChatGPT这样的智能对话系统已经成为科技领域的焦点。它不仅能够进行自然流畅的对话,还能以多种格式展示内容,为用户带来高效且丰富的交互体验。然而,这些令人惊叹的功能背后,离不开前端技…

OTA软件升级管理系统

OTA(空中下载技术)是通过空中下载的方式对车辆中的软件进行远程升级。经纬恒润OTA软件升级管理系统基于软件架构、应用架构、业务架构和技术架构,为整车提供云-管-端-屏完整OTA解决方案,可靠地完成系统更新、软件升级、功能迭代和安全漏洞修复等功能。同时支持固件升级(FOTA…

深度学习经典 - 鱼书 - 《深度学习入门:基于Python的理论与实现》 - PDF免费下载

深度学习经典“鱼书”,下载地址:https://pdfs.top/book/深度学习入门:基于Python的理论与实现.html。本书深入浅出地介绍了深度学习的原理,使用Python3从零开始构建深度学习模型。书中详细讲解了神经网络、误差反向传播法、卷积神经网络等核心技术,并探讨了深度学习在自动…

DeepSeek 相关知识学习和整理ing...

【硬件相关】 HBM3e:HBM3e是HBM(高带宽内存)技术的迭代升级版本,属于HBM3的扩展。它采用3D堆叠封装技术,将多个DRAM芯片垂直堆叠,通过硅互连通道传输数据,大幅提升带宽和容量,同时降低功耗。 迭代背景:HBM系列从第一代(HBM)到第五代(HBM3e)持续升级,每一代都提高…

打靶记录27——Tre

靶机: https://www.vulnhub.com/entry/tre-1,483/ 下载(镜像):https://download.vulnhub.com/tre/Tre.zip 难度:中目标:获得 Root 权限 + Flag攻击方法:主机发现 端口扫描 信息收集 进阶路径枚举 EXP 代码改造 突破边界方法1 突破边界方法2 突破边界方法3 权限提升主机发…

7. Docker 容器数据卷的使用(超详细的讲解说明)

7. Docker 容器数据卷的使用(超详细的讲解说明) @目录7. Docker 容器数据卷的使用(超详细的讲解说明)1. Docker容器数据卷概述2. Docker 容器数据卷的使用演示:2.1 宿主 和 容器之间映射添加容器卷2.2 容器数据卷 读写规则映射添加说明2.3 容器数据卷的继承和共享3. 最后:坑:…

到底值不值得本地部署残血版DeepSeek?一文说清!教你如何白嫖满血版DeepSeek

一、介绍最近一段时间,DeepSeek 备受关注,夏天也向身边朋友推荐。但它常无法使用,原因是受到大规模恶意攻击,且 IP 地址在美国。 通过以下网站可以查看DeepSeek网站状态: status.deepseek.com/ 可以发现,最近标红的就是故障中​若遇服务器繁忙提示,大概率是被攻击了,并…

干货:DeepSeek+SpringAI实现流式对话!

前面一篇文章我们实现了《炸裂:SpringAI内置DeepSeek啦!》,但是大模型的响应速度通常是很慢的,为了避免用户用户能够耐心等待输出的结果,我们通常会使用流式输出一点点将结果输出给用户。 那么问题来了,想要实现流式结果输出,后端和前端要如何配合?后端要使用什么技术实…

Ftrans文件安全外发系统,为企业数据保驾护航!

随着企业的不断发展,集团分公司及各部门需向外部客户、合作伙伴及海外同事外发文件。过去,主要通过邮件、FTP方式将数据进行外发,主要存在以下问题和挑战: 1.进行文件外发时需通过OA的审批,由于OA审批与FTP传输两个环节割裂,公司无法有效限制数据外发范围和管控数据外发安…

本地部署 DeepSeek:小白也能轻松搞定!

大家好,我是晓凡。 写在前面 最近DeepSeek太火了,以至于每个小伙伴都想试试。DeepSeek 的到来可谓是开启了全民AI热潮。 本以为DeepSeek本地化部署有多难,实际上验证后很简单,操作起来就像给电脑装个新软件那么简单,大约十多分钟可完成本地部署。 今天咱们来聊聊如何在自己…