如何应对redis缓存的击穿、穿透和雪崩
一、缓存击穿问题
对于一些设置了过期时间的key,如果这些key可能会在某些时间点被超高并发地访问,是一种非常“热点”的数据。这个时候,需要考虑一个问题:缓存被“击穿”的问题,这个和缓存雪崩的区别在于这里针对某一key缓存,前者则是很多key。
解决方案:
1.加锁:在未命中缓存时,通过加锁避免大量请求访问数据库
2.不允许过期:物理不过期,也就是不设置过期时间。而是逻辑上定时在后台异步的更新数据。
3.采用二级缓存:L1缓存失效时间短,L2缓存失效时间长。请求优先从L1缓存获取数据,如果 未命中,则加锁,保证只有一个线程去数据库中读取数据然后再更新到L1和L2中。然后其他线 程依然在L2缓存获取数据。
二、缓存穿透问题
缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。
解决方案:
如果一个查询返回 的数据为空(不管是数据不存在,还是系统故障),我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。
三、缓存雪崩
存雪崩是指在我们设置缓存时采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到DB,DB瞬时压力过重雪崩。
解决方案:
1、缓存失效时的雪崩效应对底层系统的冲击非常可怕。大多数系统设计者考虑用加锁或者队列的方式保证缓存的单线程(进程)写,从而避免失效时大量的并发请求落到底层存储系统上。这里分享一个简单方案就时讲缓存失效时间分散开,比如我们可以在原有的失效时间基础上增加一个随机值,比如1-5分钟随机,这样每一个缓存的过期时间的重复率就会降低,就很难引发集体失效的事件。
2、事前:这种方案就是在发生雪崩前对缓存集群实现高可用,如果是使用 Redis,可以使用主从+哨兵 ,Redis Cluster 来避免 Redis 全盘崩溃的情况。
3、事中:使用 Hystrix进行限流&降级 ,比如一秒来了5000个请求,我们可以设置假设只能有一秒2000个请求能通过这个组件,那么其他剩余的3000请求就会走限流逻辑。然后去调用我们自己开发的降级组件(降级),比如设置的一些默认值呀之类的。以此来保护最后的 MySQL 不会被大量的请求给打死。
4、事后:开启Redis持久化机制,尽快恢复缓存集群
如何应对redis缓存的击穿、穿透和雪崩相关推荐
- Redis入门到实战(实战篇)缓存更新、穿透、雪崩、击穿!
Redis基础篇 Java面试宝典-redis 实战篇Redis 开篇导读 亲爱的小伙伴们大家好,马上咱们就开始实战篇的内容了,相信通过本章的学习,小伙伴们就能理解各种redis的使用啦,接下来咱们来 ...
- redis 缓存防止击穿
灵魂拷问:缓存为何被击穿! 何为击穿? 为何被击穿! 生活案例:相信"富有"的各位有过双十一和618抢商品的经历吧? 就酸没学过程序都咳哟粗略的估计一下,上百万人和自己抢东西是有多 ...
- redis专题:redis缓存穿透、缓存击穿、缓存雪崩等问题如何解决?
文章目录 1. 缓存穿透 1.1 缓存空对象 1.2 布隆过滤器 2. 缓存击穿(失效) 3. 缓存雪崩 在高并发项目中,redis作为热门中间件,在为项目带来便利性的同时,也存在一些隐患,比如缓存穿 ...
- Redis缓存击穿、雪崩、穿透!(超详细)
缓存的击穿.穿透和雪崩应该是再熟悉不过的词了,也是面试常问的高频试题. 不过,对于这三大缓存的问题,有很多人背过了解决方案,却少有人能把思路给理清的. 而且,网络上仍然充斥着,大量不太靠谱的解决方案, ...
- Redis缓存知识-穿透、击穿、雪崩
目录 一.Redis介绍 二.Redis做缓存服务器 三.缓存穿透&击穿&雪崩 1.缓存穿透 2.缓存击穿 3.缓存雪崩 大家好,我是杨叔.每天进步一点点,关注我的微信公众号[程序员杨 ...
- Redis缓存雪崩缓存击穿缓存穿透
Redis缓存雪崩&缓存击穿&缓存穿透 一 缓存更新策略 二 缓存雪崩 三 缓存击穿 四 缓存穿透 一 缓存更新策略 目前redis缓存更新存在3种主流策略,分别是:内存淘汰.超时剔除 ...
- Redis缓存击穿,缓存穿透,缓存雪崩,附解决方案
前言 在日常的项目中,缓存的使用场景是比较多的.缓存是分布式系统中的重要组件,主要解决在高并发.大数据场景下,热点数据访问的性能问题,提高性能的数据快速访问.本文以Redis作为缓存时,针对常见的缓存 ...
- redis缓存雪崩、缓存击穿和缓存穿透还傻傻分不清?看这篇就够了
前言 关于Redis的高频问题,缓存雪崩.缓存击穿和缓存穿透一定少不了,相信大家在面试中都被问到过类似的问题.为什么这些问题一直热门呢?因为我们在使用Redis缓存时,这些问题都是很容易遇到的.接下来 ...
- Redis 缓存雪崩、击穿、穿透
Redis 缓存雪崩.击穿.穿透 文章目录 Redis 缓存雪崩.击穿.穿透 一.Redis基础 Redis基本数据类型.操作 二.面试相关问题 1.小伙子您好,看你简历上写了你项目里面用到了Redi ...
最新文章
- redis hash删除所有key_一文详解Redis面试中常见的5种数据结构及对应使用场景
- java查看文件夹下文件夹大小,java 获取文件夹大小,文件大小,文件个数
- delphi if多个条件_屡试不爽!使用策略模式代替多个if条件语句
- 阿里、京东高级算法专家讲述数学在企业中的应用
- 犹豫了几个月,我还是跳槽了....
- php与数据库如何连接,PHP中如何连接数据库
- adam算法效果差原因_信电学院本科生提出AI新算法:速度比肩Adam,性能媲美SGD,ICLR领域主席赞不绝口...
- 【阅读】《点石成金:访客至上的网页设计秘籍》读书笔记
- VIVO怎么创建计算机快捷方式,vivo手机快捷键怎么调出来
- 离职盗取代码、倒卖获利800万,北京西二旗程序员被逮捕
- Windows 下安装 tensorflow keras opencv 的避坑指南!
- WinForm实现只打开一个窗口的代码
- Java记录 -59- SortedSet
- RK3128功能介绍
- matlab 半方差分析,地统计学半方差分析几个名词含义说明
- GAEA Winsieve v1.2 1CD(快速输入和打印结晶粒度分析曲线)
- 11.Django中常用过滤器
- intel D435i 双目相机 拍摄图片并保存 python调用示例
- 五笔打字怎么学,负基础
- 生物素PEG生物素,Biotin-PEG-Biotin