Redis——缓存雪崩、缓存穿透、缓存击穿

news2024/12/27 21:20:00

在项目中,通常会使用数据库比如 MySQL 存储应用数据,但是当数据太多之后,比如多了几十万条或上百万条的商品信息,这个时候查询商品数据的速度会很慢,影响用户体验。此时一般我们会选择将部分商品信息缓存起来,提高商品的查询速度,比如使用 Redis 将明天参加秒杀活动的商品提前缓存起来,用户直接访问到缓存。速度不会很慢,也不会对数据库产生太大压力。

不过,Redis 缓存也会出现问题,最常见的 缓存雪崩、缓存穿透、缓存击穿。

缓存雪崩

在某个时间点,缓存出现的大量失效的情况,导致大量的数据直接请求到了数据库,就像雪崩一样,给数据库造成巨大压力。或者 Redis 突发故障,请求直接到了数据库,同样会造成数据库压力激增,甚至直接崩溃。比如夏天到了,很多人在电商软件上挑选短袖等,需要频繁访问,频繁查询商品的信息。假如突然缓存失效了,大量查询的请求直接请求到了后端数据库,造成了缓存雪崩。数据库承受不住这么大的压力崩溃了,那么用户就不能再进行挑选商品。

e61084a7b3a941cf83d1a7c12401942d.png

解决方案

针对大量同时过期

1. 设置不同的,或者随机的过期时间,避免出现同时过期的情况。

2. 多级缓存。比如本地缓存和分布式缓存相结合,减少单点故障风险。

3. 缓存预热。系统提交将数据预热到缓存中。

4. 加锁。保证只能一个请求能访问到数据库,等到该请求同时在缓存中创建数据之后,其他请求直接访问到缓存。

5. 接口限流,避免同时处理大量请求。

针对中间件故障可以使用集群。

 

缓存击穿

针对某一热点数据在一个时间点在处理大量请求时突然失效,导致直接请求到数据库。比如说某款热点电子产品需要到点秒杀,此时缓存失效了,大量秒杀请求打在数据库上,导致压力激增。

和缓存雪崩的区别,缓存击穿针对的是某个热点 key,缓存雪崩针对的是多个 key。

b068da826a8d4cdc82eccbed0173ea83.jpg

 解决方案

1. 缓存失效时间。热点缓存可以设置超过活动期间的时间,或者直接不设置过期时间,避免活动中途出现缓存实现。

2. 加锁。和缓存雪崩一样,如果已经出现了大量请求访问到后端时,通过加上互斥锁,确保只有一个请求能访问到数据库,然后其他请求等待这个请求将数据构建到缓存之后直接从缓存提取。

 

缓存穿透

针对缓存和数据库中不存在的数据。因为缓存不存在,每次请求都是直接访问数据库,导致数据库负载增加。会有攻击者通过构造不存在的key发起大量请求,造成系统崩溃。

51492c6e567a4108a448f276c1951738.jpg

 

解决方法

1. 无论什么情况,提前做好参数检验比如 主键 id<0直接返回错误,身份证号码位数不对直接返回错误等。

2. 接口限流。避免同时处理大量请求,并且可以设置黑名单,对频繁请求的账号做黑名单处理。

3. 缓存空值。将没有查询到的数据缓存一个空值返回给客户端,下次直接访问空值缓存。

4. 布隆过滤器。

 

 

 

 

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

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

相关文章

【Rollup】用rollup从0到1开发一个js插件并发布到npm

Rollup 是一个 JavaScript 模块打包器,专注于打包 ES6 模块将其编译回多种模块化格式,尤其适合打包库和框架,因为它可以生成更小、更高效的代码,并且特别适合将代码打包成可在浏览器中使用的库。 从0到1开发js插件 1.创建文件夹…

2.前端路由的配置和使用

一,路由的作用 路由的作用就是将页面文件跟URL地址形成对应匹配 二,如何安装路由 这里我们采用pnpm的方式在项目中执行 pnpm install vue-routernext --save三,路由如何使用 首先创建一个我们需要访问的页面文件,这里我先创建…

机器学习:葡萄酒品质预测

说明,此项目是我的期末大作业,包括了对数据集探索,预处理以及分类的各个详细过程与描述,代码简单,主要是一个分类项目的流程,并没有对模型进行深度研究,因此我写在这里。 目录 一、问题介绍 …

ETL工具kettle(PDI)入门教程,Job

先新建两个Transform,MysqlToMysql.ktr和CsvToExcel.ktrURL:ETL工具kettle入门教程,transform,Mysql->Mysql,Csv->Excel-CSDN博客 主对象树,作业上右击,点击新建 核心对…

Unity引擎是什么?有哪些优点

大家好,我是咕噜土豆,很高兴又和大家见面了。今天我们一起来了解一下Unity引擎和它有哪些优点。 首先带大家了解什么是Unity引擎 Unity引擎是一款由Unity Technologies开发的跨平台游戏开发引擎,广泛用于创建2D和3D游戏以及其他交互式内容&…

uniapp管理后台编写,基于uniadmin和vue3实现uniapp小程序的管理后台

一,创建uniAdmin项目 打开开发者工具Hbuilder,然后点击左上角的文件,点新建,点项目。如下图。 选择uniadmin,编写项目名,然后使用vue3 记得选用阿里云服务器,因为最便宜 点击创建,等待项目创…

AI跟踪报道第41期-新加坡内哥谈技术-本周AI新闻:本周Al新闻: 准备好了吗?事情即将変得瘋狂

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

在Spring Boot应用安装SSL证书

目录 前提条件 步骤一:下载SSL证书 步骤二:在Spring Boot安装SSL证书 步骤三:验证SSL证书是否安装成功 前提条件 已通过数字证书管理服务控制台签发证书SSL证书绑定的域名已完成DNS解析,即您的域名与主机IP地址相互映射已在W…

ASP.NET学生信息管理系统

摘 要 本文介绍了在ASP.net环境下采用“自上而下地总体规划,自下而上地应用开发”的策略开发一个管理信息系统的过程。通过分析某一学校学生管理的不足,创建了一套行之有效的计算机管理学生的方案。文章介绍了学生管理信息系统的系统分析部分&#xff0c…

【C++ | 函数】默认参数、哑元参数、函数重载、内联函数

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 ⏰发布时间⏰:2024-05-04 1…

Linux —— 信号(4)

Linux —— 信号(4) 信号的处理用户态和内核态 信号的捕捉sigaction sa_mask字段volatileSIGCHLD信号 我们今天接着来看信号: 信号的处理 信号的处理简单一句话就是在内核态处理的。 用户态和内核态 用户态和内核态是操作系统和计组中的概…

MySQL系列之索引

🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 往期热门专栏回顾 专栏…

【声呐仿真】学习记录2-运行ROV(带camera、sonar、dvl等传感器)例程

【声呐仿真】学习记录2-运行ROV(带camera、sonar、dvl等传感器)例程 前言第一阶段-学习Gazebo第二阶段-学习URDF、xacro第三阶段-寻找例程跑一个rexrov示例程序1.uuvsimulator quick_start2.能键盘控制的示例程序(失败)3.能键盘控…

[初阶数据结构】单链表

前言 📚作者简介:爱编程的小马,正在学习C/C,Linux及MySQL。 📚本文收录于初阶数据结构系列,本专栏主要是针对时间、空间复杂度,顺序表和链表、栈和队列、二叉树以及各类排序算法,持…

【Python系列】字节串与字典字节串

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【高校科研前沿】北师大陈晋教授团队在遥感顶刊发表最新成果:ClearSCD模型:在高空间分辨率遥感影像中综合利用语义和变化关系进行语义变化检测

01文章简介 论文名称:The ClearSCD model: Comprehensively leveraging semantics and change relationships for semantic change detection in high spatial resolution remote sensing imagery(ClearSCD模型:在高空间分辨率遥感影像中综合…

Nextcloud私有云盘-重新定义云存储体验

Nextcloud私有云盘-重新定义云存储体验 1. 什么是Nextcloud ​ Nextcloud是一个开源的云存储和协作平台,旨在为个人用户、企业和团队提供安全、隐私保护的数据存储和共享解决方案。它允许您在不同设备之间同步、共享文件,提供了强大的协作工具和应用生…

VSCode:设置顶部文件标签页滚动条的宽度

使用VSCode打开多个文件后,顶部的文件标签可以通过滚动条进行滚动,但是缺点是该滚动条太窄了,不好选择。 可以通过如下方法修改改滚动条的宽度: 1.点击设置 2.选择工作台->编辑管理->Title Scrollbar Sizing->Large 3.可…

MSP430环境搭建

1.下载ccs编译器 注意:安装路径和工作路径不能出现中文! 没有说明的步骤就点next即可! 1.1下载适合自己电脑的压缩包。 下载好压缩包后解压,点击有图标进行安装。 1.2创建一个文件夹用于安装编译器位置 选择安装地址&#xff0…

FFmpeg常用API与示例(四)——过滤器实战

1.filter 在多媒体处理中,filter 的意思是被编码到输出文件之前用来修改输入文件内容的一个软件工具。如:视频翻转,旋转,缩放等。 语法:[input_link_label1]… filter_nameparameters [output_link_label1]… 1、视…