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

devtools/2024/10/18 12:27:01/

一、背景:

在维护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.ppmy.cn/devtools/14202.html

相关文章

spring的bean创建流程源码解析

文章目录 IOC 和 DIBeanFactoryApplicationContext实现的接口1、BeanFactory接口2、MessageSource 国际化接口3、ResourcePatternResolver,资源解析接口4、EnvironmentCapable接口,用于获取环境变量,配置信息5、ApplicationEventPublisher 事…

应用在防蓝光显示器中的LED防蓝光灯珠

相比抗蓝光眼镜、防蓝光覆膜、软体降低蓝光强度这些“软”净蓝手段,通过对LED的发光磷粉进行LED背光进行技术革新,可实现硬件“净蓝”。其能够将90%以上的有害蓝光转换为450nm以上的长波低能光线,从硬件的角度解决了蓝光危害眼睛的问题&#…

25计算机考研院校数据分析 | 四川大学

四川大学(Sichuan University)简称“川大”,由中华人民共和国教育部直属,中央直管副部级建制,是世界一流大学建设高校、985工程”、"211工程"重点建设的高水平综合性全国重点大学,入选”2011计划"、"珠峰计划…

真实世界的密码学(一)

原文:annas-archive.org/md5/655c944001312f47533514408a1a919a 译者:飞龙 协议:CC BY-NC-SA 4.0 前言 序言 当你拿起这本书时,你可能会想,为什么又一本关于密码学的书?甚至,为什么我要读这本…

《从零开始的Java世界》10File类与IO流

《从零开始的Java世界》系列主要讲解Javase部分,从最简单的程序设计到面向对象编程,再到异常处理、常用API的使用,最后到注解、反射,涵盖Java基础所需的所有知识点。学习者应该从学会如何使用,到知道其实现原理全方位式…

Hadoop - 安装

文章目录 关于 Hadoop架构变迁 1.0 --> 2.0 --> 3.0 安装配置安装配置环境变量配置core-site.xmlhdfs-site.xmlmapped-site.xmlyarn-site.xml配置 hadoop-env 启动/停止 Hadoop 服务查看 hdfs report 关于 Hadoop The Apache™ Hadoop project develops open-source soft…

数字信号处理操作教程_音频解码:3-8 G711A音频解码实验

一、实验目的 学习G711音频的格式和G711A音频解码的原理,并实现将BIT格式解码为PCM格式。 二、实验原理 G711 G711是国际电信联盟订定出来的一套语音压缩标准,主要用于电话。它主要用脉冲编码调制对音频采样,采样率为8k每秒。它利用一个 …

python根据一定概率判断是否选择

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Python中基于概率进行选择的方法 在编程中,我们经常会遇到需要根据一定的概率来…