缓存穿透、缓存击穿、缓存雪崩的场景以及解决方法

news/2024/12/25 2:14:10/文章来源:https://www.cnblogs.com/qimoxuan/p/18306414

都是缓存惹的祸
在项目开发中,我们的数据都是要持久化到磁盘中去,比如使用 MySQL进行持久化存储,但是呢由于流量越来越大,查询速度也逐渐变慢了起来,于是我们决定!使用缓存!然而使用缓存导致会经常面临三座大山!缓存穿透!!缓存击穿!!缓存雪崩!!,接下来我们将会逐一分析他们导致的原因以及解决方法。
缓存雪崩

介绍
缓存雪崩是指在某个时间点,大量缓存同时失效或被清空,导致大量请求直接打到数据库或后端系统,造成系统负载激增,甚至引发系统崩溃。这通常是由于缓存中的大量数据在同一时间失效引起的。想象一个在线电商系统,用户访问频繁,需要频繁查询商品信息。假设某一系列的商品突然全部同一时间失效,那就会造成我们的缓存雪崩。或者某一个时刻 Redis 缓存中间件故障了,导致服务全部打到了数据库,也会导致缓存雪崩的情况。
解决办法
缓存键同时失效:
1)过期时间随机化:设置缓存的过期时间,加上一个随机值,避免同一时间大量缓存失效。
2)使用多级缓存:引入多级缓存机制,如本地缓存和分布式缓存相结合,减少单点故障风险。
3)缓存预热:系统启动时提前加载缓存数据,避免大量请求落到冷启动状态下的数据库。
4)加互斥锁:保证同一时间只有一个请求来构建缓存,别的只能等它构建完成再从缓存中读取。
缓存中间件故障:
1)服务熔断:暂停业务的返回数据,直接返回错误。
2)构建集群:构建多个 Redis 集群保证其高可用。
缓存击穿

介绍
缓存击穿是指针对某一热点数据的大量请求导致缓存失效,进而直接请求数据库,增加数据库负载。这种情况通常发生在某个特定的缓存 key 在失效时,恰好有大量请求到达。想象一下大家都在抢茅台,但在某一时刻茅台的缓存失效了,大家的请求打到了数据库中,这就是缓存击穿,那他跟缓存雪崩有什么区别呢?缓存雪崩是多个 key 同时,缓存击穿是某个热点 key 崩溃。也可以认为缓存击穿是缓存雪崩的子集,
解决办法
1)加互斥锁:保证同一时间只有一个请求来构建缓存,别的只能等它构建完成再从缓存中读取。跟缓存雪崩相同。
2)永久:不要给热点数据设置过期时间。
缓存穿透

介绍
缓存穿透是指查询一个不存在的数据,由于缓存和数据库中均不存在,导致每次请求都直接访问数据库增加数据库负载。攻击者可以通过构造不存在的 key 发起大量请求,造成系统宕机。比如有些小黑子对于我们开发的网站进行恶意的请求,将一些数据库不存在的 ID 疯狂的打在我们的服务器上,如果没做好缓存穿透的预防,还真给你们小黑子得逞了。
解决办法
1)防止非法请求:检查非法请求,封禁其IP 以及账号,防止它再次为非作歹。。
2)缓存空值:允许缓存空值或者可以给他一个默认值。
3)使用布隆过滤器:通过布隆过滤器给数据做一个标记,当发生缓存穿透时也不会请求数据库造成压力直接通过布降过滤器和 Redis 判断返回。

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

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

相关文章

CSS Case Insensitive Attribute Selector All In One

CSS Case Insensitive Attribute Selector All In One CSS 大小写敏感的属性选择器CSS Case Insensitive Attribute Selector All In OneCSS 大小写敏感的属性选择器/* case sensitive, only matches "case_sensitive" */ [class=case_sensitive] {background: pink;…

玄机-第一章 应急响应- Linux入侵排查

玄机-第一章 应急响应- Linux入侵排查 简介 账号:root 密码:linuxruqin ssh root@IP 1.web目录存在木马,请找到木马的密码提交 2.服务器疑似存在不死马,请找到不死马的密码提交 3.不死马是通过哪个文件生成的,请提交文件名 4.黑客留下了木马文件,请找出黑客的服务器ip提交…

关于Win10 Penetration系统内置kali虚拟机WSL报错的解决方法

关于Win10 Penetration系统内置kali虚拟机WSL报错的解决方法: Win10 Penetration下载地址:https://pan.baidu.com/s/16b4_j9wuK_81G4uJKhNZyA?pwd=bj7t 提取码:bj7t Win10 Penetration是什么? Windows10 Penetration Suite Toolkit within Kali Linux是一个集成了各种渗透…

JMeter上传文件接口教程—01

Content-Type: multipart/form-data; 格式步骤: 1、添加HTTP Request、填写好HOST、URL等信息,这一步如果没有接口文档参照,可以去F12或者Fiddler抓包,我们这里重点讲没有接口文档的情况下如何做, 如果除了文件以外,还有表单数据,还是需要放在Parameters里边的。 2、上传…

如何在 Android 项目中应用 OpenCV?

如何在 Android 项目中应用 OpenCV? 流程总览导入 OpenCV 库 在 Android 项目中配置 OpenCV 创建人脸识别器 识别并裁剪人脸区域 显示裁剪后的人脸图片具体实现 导入 OpenCV 库先去 OpenCV 官网下载 OpenCV 的 Android 库并解压:https://opencv.org/releases/ 在项目中点击 f…

Android 开发学习笔记

Android 开发学习笔记 基本概念 Android 应用程序由一些零散的有联系的组件组成,通过一个工程 manifest 绑定在一起。在 manifest 中,描述了每一个组件以及组件的作用,其中有 6 个组件,它们是 Android 应用程序的基石。Android 有四大组件(也有说六大组件的,外加 Intent …

Synergy键鼠跨屏幕同步

Synergy 在多台计算机之间使用单个键盘和鼠标,使用一台计算机的键盘、鼠标或触控板来控制附近的计算机,并在它们之间无缝工作 支持Windows Mac Linux 和树莓派,解放桌面空间,减少操作复杂性,多屏操作神器没错了小记 Synergy 在多台计算机之间使用单个键盘和鼠标,使用一台…

基于粒子群优化的图像融合算法matlab仿真

1.程序功能描述基于粒子群优化的图像融合算法,通过PSO优化,得到最优的图像融合权值参数,将彩色模糊图像和清晰的灰度图像进行融合获得彩色清晰图像。2.测试软件版本以及运行结果展示 MATLAB2022a版本运行 3.核心程序for it = 1:Ites(ijj)itfor i=1:Popu% 更新速度 ptls(i)…

一起学RISC-V汇编第3讲之寄存器

寄存器是处理器中最常用的处理单元,RISC-V指令的操作数除了立即数就是寄存器。 RISC-V指令集包含了多种不同类型的寄存器,用于不同目的和功能: 对于rv32imafd架构而言,包含如下寄存器:通用寄存器:32个通用整数寄存器,分别标记为x0-x31,如果是fd扩展,还有32 个独立的浮…

第三期 Plugins Function Calling

大模型的缺陷:没有最新消息:训练周期长且昂贵,GPT3.5/4的知识截至2021-9 没有真逻辑:表现出的逻辑和推理,是训练文本的统计规律,不是真正的逻辑Plugins 订机票、数学计算、日程提醒... 插件选择&使用插件的原理 通过prompt判断是否应该调用插件失败使用门槛高:用户需…

第四期 AI 编程

目标如何用 AI 辅助编程,提升工作效率 如何用 AI 快速应用和学习新技术,扩展职业边界 通过 AI 编程,洞察 AI 对各个行业的影响趋势产品与技术的联通+业务视角 =AI 全栈工程师 AI 编程 使用 AI 编程(编程目前是大模型能力最强的垂直领域),除了解决编程问题以外,更重要是建…

Linux调度器:进程优先级

一、前言 本文主要描述的是进程优先级这个概念。从用户空间来看,进程优先级就是nice value和scheduling priority,对应到内核,有静态优先级、realtime优先级、归一化优先级和动态优先级等概念,我们希望能在第二章将这些相关的概念描述清楚。为了加深理解,在第三章我们给出…