redis故障中出现的缓存击穿、缓存穿透、缓存雪崩?

news2025/1/12 20:38:56

一、背景:

在维护redis服务过程中,经常遇见一些redis的名词,例如缓存击穿、缓存穿透、缓存雪崩等,但是不是很理解这些,如下就来解析一下缓存击穿、缓存穿透、缓存雪崩名词。

二、缓存穿透问题:

常见的缓存使用方式:读请求来了,先查下缓存,缓存有值命中,就直接返回;缓存没命中,就去查数据库,然后把数据库的值更新到缓存,再返回。

流程图如下:

1、缓存穿透解析:

指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,进而给数据库带来压力。
通俗点说,读请求访问时,缓存和数据库都没有某个值,这样就会导致每次对这个值的查询请求都会穿透到数据库,这就是缓存穿透。

2、缓存穿透一般都是这几种情况产生:

1、业务不合理的设计:比如大多数用户都没开守护,但是你的每个请求都去缓存,查询某个userid查询有没有守护。
2、业务/运维/开发失误的操作:比如缓存和数据库的数据都被误删除了。
3、黑客非法请求攻击:比如黑客故意捏造大量非法请求,以读取不存在的业务数据。

3、如何避免缓存穿透呢? 

一般有三种方法:
1.如果是非法请求,我们在API入口,对参数进行校验,过滤非法值。
2.如果查询数据库为空,我们可以给缓存设置个空值,或者默认值。但是如有有写请求进来的话,需要更新缓存哈,以保证缓存一致性,同时,最后给缓存设置适当的过期时间。(业务上比较常用,简单有效)
3.使用布隆过滤器快速判断数据是否存在。即一个查询请求过来时,先通过布隆过滤器判断值是否存在,存在才继续往下查。

注:布隆过滤器原理:
它由初始值为0的位图数组和N个哈希函数组成。一个对一个key进行N个hash算法获取N个值,在比特数组中将这N个值散列后设定为1,然后查的时候如果特定的这几个位置都为1,那么布隆过滤器判断该key存在。


三、缓存雪奔问题:

缓存雪奔: 指缓存中数据大批量到了过期时间,而查询数据量巨大,请求都直接访问数据库,引起数据库压力过大甚至down机。

缓存雪奔一般是由于大量数据同时过期造成的,对于这个原因,可通过均匀设置过期时间解决,即让过期时间相对离散一点。如采用一个较大固定值+一个较小的随机值,5小时+0到1800秒。

注:Redis 故障宕机也可能引起缓存雪奔。这就需要构造Redis高可用集群啦。

四、缓存击穿问题:

1、缓存击穿解析:

指热点key在某个时间点过期的时候,而恰好在这个时间点对这个Key有大量的并发请求过来,从而大量的请求打到db。

缓存击穿与缓存雪崩看着有点像,其实它两区别:

缓存雪奔是指数据库压力过大甚至down机,缓存击穿只是大量并发请求到了DB数据库层面。可以认为击穿是缓存雪奔的一个子集吧。

2、缓存击穿的解决方案:

1.使用互斥锁方案。缓存失效时,不是立即去加载db数据,而是先使用某些带成功返回的原子操作命令,如(Redis的setnx)去操作,成功的时候,再去加载db数据库数据和设置缓存。否则就去重试获取缓存。
2. “永不过期”,是指没有设置过期时间,但是热点数据快要过期时,异步线程去更新和设置过期时间。

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

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

相关文章

update_min_vruntime()流程图

linux kernel scheduler cfs的update_min_vruntime() 看起来还挺绕的。含义其实也简单,总一句话,将 cfs_rq->min_vruntime 设置为: max( cfs_rq->vruntime, min(leftmost_se->vruntime, cfs_rq->curr->vruntime) )。 画个流…

Laravel5.4 反序列化

文章目录 0x01 环境搭建0x02 POP 链0x03 exp0x04 总结 前言:CC 链复现的头晕,还是从简单的 Laravel 开始吧。 laravel 版本:5.4 0x01 环境搭建 laravel安装包下载地址 安装后配置验证页面。在 /routes/web.php 文件中添加一条路由&#xf…

Java核心技术.卷I-上-笔记

目录 面向对象程序设计 使用命令行工具简单的编译源码 数据类型 StringBuilder 数组 对象与类 理解方法调用 继承 代理 异常 断言 日志 面向对象程序设计 面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分从根本上…

在Primavera P6 中维护自定义活动栏

前言 自从 Henry Gantt 在 1910 年左右提出这个想法以来,以图形方式显示项目进度表并沿时间刻度显示条形图一直延续到当今最复杂和流行的项目进度系统中。在本文中,我们将仔细研究 Primavera P6 Professional 中的甘特图,并探索一些自定义其…

一天狂涨2000亿的谷歌,看到了AI商业化的曙光

“人工智能是有史以来最深刻的平台变革之一,谷歌依旧会成为第一。” -谷歌CEO桑达尔皮查伊 在2024年一季度财报发布后,谷歌盘后涨超10%,终于站稳加入了“2 万亿美元俱乐部”。 从财报数据来看,谷歌一季度总营收805.4…

新手开通抖音小店的时候,必须要注意的6点!建议收藏!

大家好,我是电商小V 今天咱们就来详细的说一下开通抖音小店的时候需要注意的事项,避免咱们在开店的时候踩坑导致店铺后期的正常运营, 第一点:是关于营业执照的问题 营业执照咱们都知道,分为个体和企业的,咱…

正态分布的参数及意义

正态分布,也称为高斯分布,是统计学中最重要的分布之一,具有许多重要的特性。正态分布的参数包括均值(μ)和标准差(σ),有时也使用方差(σ^2)来描述。下面是这…

【快速入门】数据库的增删改查与结构讲解

文章的操作都是基于小皮php study的MySQL5.7.26进行演示 what 数据库是能长期存储在计算机内,有组织的,可共享的大量数据的集合。数据库中的数据按照一定的数据模型存储,具有较小的冗余性,较高的独立性和易扩展性,并为…

[单机]仿官武林外传飞羽完美版本_附带GM工具_虚拟机架设_视频教程

概述 今天给大家带来一款单机游戏架设教程, 仿官武林外传飞羽完美版本 演示视频 [单机]仿官武林外传飞羽完美版本_附带GM工具_虚拟机架设_ 环境准备 windows电脑一台,安装好vmvare12虚拟机 ,安装教程和激活码获取 githubs.xyz/boot?app3…

javase学习01-GUI设计中的菜单条,菜单及菜单项(简单的实现)

目录 一,效果及代码 二,相关内容 1,创建图片资源文件夹 2,菜单初识 3,图标大小设置 4,菜单高度设置 今天学习了Java的GUI(graphics user interface)图形用户界面中的窗口和菜单…

超市购物|基于SprinBoot+vue的超市购物系统(源码+数据库+文档)

目录 基于SprinBootvue的企业人事管理系统 一、前言 二、系统设计 三、系统功能设计 1商品管理 2公告管理 3公告类型管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设…

FR-TSN4206获得“时间敏感网络产业链名录计划”测试认证证书,TSN交换机助力智能工业发展

TSN技术,即时间敏感网络技术,已成为智能工业、自动驾驶等领域的核心。它通过时钟同步、数据调度等功能,确保低延迟、高可靠性的数据传输。 为推动TSN技术在我国的发展,工业互联网产业联盟联合多家单位启动了“时间敏感网络产业链名…

http1.1和http2.0的同源请求数限制

判断协议版本 :scheme: 在请求头中表示使用的是HTTP/2协议。即 出现 :开头的请求头Chrome 只支持查看 HTTP/1.x 的 Raw Headers,对这种请求,会给出 view source 选项。HTTP2.0不给出。可继续学习 https://www.cnblogs.com/kirito-c/p/10360868.html抓包…

C语言贪吃蛇项目

今天给大家带来一款简单的贪吃蛇游戏,一起随我来看看吧 游戏效果: 实现基本的功能: • 贪吃蛇地图绘制 • 蛇吃⻝物的功能:(上、下、左、右⽅向键控制蛇的动作) • 蛇撞墙死亡 • 蛇撞⾃⾝死亡 • 计算得分…

docker搭建nacos集群并用mysql做持久化

1、首先需要准备四台机器,其中三台用于集群构建,IP地址分别为:IP1,IP2,IP3,一台用于mysql,IP地址为IP4 2、需要找到另外一台机器搭建mysql,用于持久化配置,并且新建数据库nacos_config&#xff…

CarrierConfig 加载流程和配置覆盖问题

问题 有的MVNO卡没有配置过 CarrierConfig及相关 overlay,但是实际运行的时候功能被override了 ,此时可能是因为CarrierConfig用了父类(同MCCMNC等情况)的配置,因此在直接查找对应卡cid或mccmnc+mvno属性时候的CarrierConfig是没办法找到影响功能的配置项的。 代码逻辑 …

服务器数据恢复—异常断电导致RAID模块故障的数据恢复案例

服务器数据恢复环境: 某品牌ProLiant DL380系列服务器,服务器中有一组由6块SAS硬盘组建的RAID5阵列,WINDOWS SERVER操作系统,作为企业内部文件服务器使用。 服务器故障: 机房供电几次意外中断,服务器出现故…

Socket编程--TCP连接以及并发处理

流程图 网络传输流程: TCP连接: api 客户端: socket: 创建套接字 domain: AF_INET :IPv4 type: SOCK_STREAM(tcp)、SOCK_DGRAM(udp) protocol: 0 默认协议 返回值:成功返回一个新的套接字…

RakSmart站群服务器租用注意事项科普

随着互联网的飞速发展,站群运营成为越来越多企业和个人的选择。而RakSmart作为知名的服务器提供商,其站群服务器租用服务备受关注。在租用RakSmart站群服务器时,源库建议有一些关键的注意事项需要特别留意,以确保服务器的稳定运行…

ThinkPHP5 SQL注入漏洞敏感信息泄露漏洞

1 漏洞介绍 ThinkPHP是在中国使用极为广泛的PHP开发框架。在其版本5.0&#xff08;<5.1.23&#xff09;中,开启debug模式&#xff0c;传入的某参数在绑定编译指令的时候又没有安全处理&#xff0c;预编译的时候导致SQL异常报错。然而thinkphp5默认开启debug模式&#xff0c…