缓存雪崩 缓存击穿 缓存雪崩出现原因及解决方案
文章目录
- 缓存雪崩
- 出现原因一
- 解决方案
- 方案一 差异化设置过期时间
- 方案二 服务降级
- 方案三 不设置过期时间
- 出现原因二
- 解决方案
- 方案一 服务熔断
- 方案二 请求限流
- 方案三 Redis构建高可靠集群
- 缓存击穿
- 解决方案
- 方案一 分布式锁
- 方案二 热点数据不设置过期时间
- 缓存穿透
- 出现原因
- 解决方案
- 方案一 设置缺省值
- 方案二 使用布隆过滤器过滤数据
缓存雪崩
大量的应用请求无法在Redis缓存中进行处理,紧接着应用将大量请求发送到数据库层,导致数据库层的压力激增
缓存雪崩一般有两个原因导致,解决方案也有所不同
出现原因一
缓存中有大量Key同时过期,导致大量请求无法得到处理,大量数据需要回源数据库
解决方案
方案一 差异化设置过期时间
差异化缓存过期时间,不要让大量的 Key 在同一时间过期。比如,在初始化缓存的时候,给这些数据的过期时间增加一个较小的随机数,这样一来不同数据的过期时间有所差别又差别不大,即避免了大量数据同时过期又能保证这些数据在相近的时间失效
方案二 服务降级
允许核心业务访问数据库,非核心业务直接返回预定义的信息
方案三 不设置过期时间
初始化缓存数据的时候设置缓存永不过期,然后启动一个后台线程 30 秒一次定时把所有数据更新到缓存,而且通过适当的休眠,控制从数据库更新数据的频率,降低数据库压力。
出现原因二
Redis实例发生故障宕机,无法处理请求,就会导致大量请求积压到数据库层
解决方案
方案一 服务熔断
暂停业务应用对缓存服务的访问,从而降低对数据库的压力
方案二 请求限流
控制每秒进入应用程序的请求数,避免过多的请求被发到数据库
方案三 Redis构建高可靠集群
通过主从节点的方式构建Redis高可靠集群。可以保证在Redis主节点故障宕机时,从节点切换到主节点,继续提供服务,避免由于缓存实例宕机导致缓存雪崩
缓存击穿
热点数据在某一时刻过期了,可能会导致随之而来的大量的并发请求直接打到数据库,导致数据库压力激增。
解决方案
方案一 分布式锁
采用锁机制控制打到数据库的请求,读取数据后将其写回到缓存,保证了其他线程可以命中缓存。
//伪代码
加锁成功;
result=redis.getKey(X);
if(result==null){result=db.getData(X);redis.setData(X,result);
}
释放锁;
方案二 热点数据不设置过期时间
缓存穿透
客户端 请求了一个业务程序中不存在的数据,即要访问的数据既不在Redis缓存中,也不在数据库中。导致每次类似的请求,都会先从Redis–>数据库去查数据,最终也无果。
当存在大量请求这样访问时,会同时给缓存和数据库带来很大压力。
出现原因
1、误操作导致:缓存中的数据和数据库中的数据都被误删了
2、恶意攻击:专门访问数据库中不存在的数据
解决方案
方案一 设置缺省值
比如当请求id=1000的用户数据时,在数据库中找不到该条数据,则将NONE这样具有特殊含义的字符串设置到缓存中,后续客户端再请求该数据时,可以直接命中缓存,不再访问数据库。
但是这样有个问题,如果客户端访问大量的不同的数据,那这些大量无效的数据可能会占满缓存
方案二 使用布隆过滤器过滤数据
布隆过滤器由一个初值都为 0 的 bit 数组和 N 个哈希函数组成,可以用来快速判断某个数据是否存在。
工作原理
1、使用 N 个哈希函数,分别计算这个数据的哈希值,得到 N 个哈希值
2、把这 N 个哈希值对 bit 数组的长度取模,得到每个哈希值在数组中的对应位置。
3、标记数据,把对应位置的 bit 位设置为 1
如果数据不存在,那布隆过滤器中bit数组对应的bit位的值为0.
过滤规则:
当一个元素需要被检索时,使用N个哈希函数对该元素求得哈希值,并定位到bit数组中。如果发现对应位置处bit位有任何一个0,就说明这个元素不存在于布隆过滤器;当bit位都是1,说明这个元素可能存在于布隆过滤器(这里说可能,是因为不同元素经过哈希运算可能得到相同的哈希值)
像Guava、Redisson 都有布隆过滤器的实现。
我们只需要初始化布隆过滤器,即将数据添加到布隆过滤器中。然后借助布隆过滤器去判断元素是否存在
参考文献
Redis核心技术与实战
缓存雪崩 缓存击穿 缓存雪崩出现原因及解决方案相关推荐
- Redis 缓存穿透、击穿、雪崩现象及解决方案
前言 如何有效的理解并且区分 Reids 穿透.击穿和雪崩 缓存穿透 关键词:穿过 Redis 和数据库 当 Redis 和数据库中都没有我们想要的数据时,就需要考虑缓存穿透的问题了.下面这段逻辑大家 ...
- Redis应用问题解决(缓存穿透、击穿、雪崩、分布式锁)
Redis应用问题解决(缓存穿透.击穿.雪崩.分布式锁) 缓存穿透 问题描述 当系统中引入redis缓存后,一个请求进来后,会先从redis缓存中查询,缓存有就直接返回,缓存中没有就去db中查询,db ...
- Redis中的缓存雪崩、击穿、穿透的原因以及解决办法
缓存雪崩.击穿.穿透一旦发生,会导致大量的请求积压到数据库层.如果请求的并发量很大,就会导致数据库宕机或是故障,这就是很严重的生产事故了. 俗话说,知己知彼,百战不殆.了解了问题的成因,我们就能够在应 ...
- 缓存穿透、击穿、雪崩什么的傻傻分不清楚?看了这篇文后,我明白了
对于缓存,大家肯定都不陌生,不管是前端还是服务端开发,缓存几乎都是必不可少的优化方式之一.在实际生产环境中,缓存的使用规范也是一直备受重视的,如果使用的不好,很容易就遇到缓存击穿.雪崩等严重异常情景, ...
- 缓存穿透、击穿、雪崩
一.缓存穿透 缓存穿透是指缓存和数据库中均不存在目标数据,而用户不断发起请求,缓存也得不到更新,由此每次请求该数据都会到数据库.高并发量,就会对后端的 DB 系统造成很大压力.如查询 id 为&quo ...
- Redis缓存穿透、击穿、雪崩、概念及解决办法
在生产环境中,会因为很多的原因造成访问请求绕过了缓存,都需要访问数据库持久层,虽然对Redsi缓存服务器不会造成影响,但是数据库的负载就会增大,使缓存的作用降低 一.缓存穿透 1.缓存穿透理解 缓 ...
- 什么是缓存穿透,击穿,雪崩,怎么解决?
缓存穿透:指在高并发场景下,如果某一个 key 被高并发访问,没有被命中,出于对容错性考虑,会尝试去从后端数据库中获取,从而导致了大量请求到达数据库,而当该 key 对应的数据库本身就是空的情况下,这 ...
- Redis 缓存穿透、击穿、雪崩 解决方法
目录 引言 一.缓存穿透 1. 缓存穿透的原理 2. 解决方法 2.1 布隆过滤器 2.2 缓存空对象 二.缓存击穿 1. 缓存击穿原理 2. 解决方法 2.1 设置热点数据永不过期 2.2 加互斥锁 ...
- Redis缓存穿透、击穿、雪崩面试题详解
缓存穿透 问题: 指的是客户端请求的数据在缓存中找不到,数据库中也没有存储,客户端还不断的发起请求.这样每次都无法在数据库查询到,缓存中永远没有这个数据. 这样的话,客户端一直去访问,会给后端数据 ...
- 5 Redis缓存穿透、击穿、雪崩、分布式锁、布隆过滤器
1 Redis 应用问题解决 1.1 缓存穿透 1.1.1 问题描述 key 对应的数据在数据源并不存在,每次针对此 key 的请求从缓存获取不到,请求都会压到数据源(数据库),从而可能压垮数据源.比 ...
最新文章
- Tensorflow tf.layers
- FM之RKD_WORD_WRAP
- ubuntu搭建zookeeper集群
- 深入理解Java:注解
- 问题:循环元素,被选中元素个数,全选
- 实践单元测试(2) - 大话单元测试
- electron forge 好用吗_在优麒麟上使用 Electron 开发桌面应用
- SQLite学习和使用
- win10 安装低版本的 .net framework
- js调整数组某些元素到指定位置顺序_如何在JS数组特定索引处指定位置插入元素?...
- 收到客户反馈的BUG,主管应该怎么办
- OAuth 2 开发人员指南(Spring security oauth2)
- 通过双击运行linux脚本
- 谷歌支付服务端服务账号订单校验
- 【BZOJ】2078: [POI2004]WYS
- 项目质量监测(三)e2e test端到端测试——单元测试和端到端测试 e2e test工具-Cypress Nightwatch TeatCafe Codecov-测试结果可视化
- 2022新版千月影视双端APP带H5功能开源程序支持当面付和易支付
- 墨尔本计算机读研申请条件,墨尔本大学计算机硕士申请条件
- 学会IDEA REST Client后,postman就可以丢掉了...
- 不允许使用抽象类类型的对象怎么办_什么是抽象类?
热门文章
- java调用自己写的类型_Java基础——自定义类的使用
- ArcGIS教程:将支持页面插入地图册
- Pbootcms网站防黑、防跨站的经验分享
- 系统架构概念及思想1
- [C++](16)多态:虚函数,使用,多态的原理
- 伪随机码(verilog)
- 2014重庆邮电大学/重邮考研/计算机最全复试资料/c语言程序设计,重庆邮电大学计算机学院复试经验...
- 负折射率波导matlab,第二章-理想平板介质光波导中的光传播特性及仿真-终版.pdf...
- 1500ml等于多少l_正常人的血糖标准是多少?如何判断自己患上了糖尿病
- 徒有虚名的黄页,分类,垂直类网站评测 我对114.com.cn的分析[原创]