Redis缓存雪崩,击穿和穿透
这三个问题的发生,会导致大量的请求直接积压到数据库,如果并发量很大,则可能会导致数据库宕机或故障。
缓存雪崩
描述:大量的请求无法在redis缓存中进行处理而被发送到数据库,导致数据库压力陡增。
产生的原因:
1. redis缓存中大量的数据同时到期,导致大量请求无法在缓存中得到处理。
解决方案:
a.微调过期时间。避免给大量的数据设置相同的过期时间,如果业务一定需要这些数据同时过期,可以在设置过期时间的时候,给这些过期时间增加一个较小的随机数(如1-3分钟),这样不同数据的过期时间有所差别但差别也不是很大。
b.服务降级。雪崩发送时,针对不同的数据采取不同的措施。
(1)非核心数据(如电商商品的属性),暂时停止从缓存获取数据,而且返回预定值,空值或者异常信息。
(2)核心数据,仍然允许查询缓存,缓存中没有则从数据库获取。
2. redis缓存实例发送故障宕机导致无法处理缓存查询请求,使请求积压到数据库层。
解决方案:
a. 在业务系统中实现服务熔断或者请求限流。通过监控负载指标发现雪崩现象的发生,然后启动熔断机制,暂停业务应用对缓存服务的接口访问。而限流则是,在发现雪崩时,限制并发请求数量的访问,如限制到1000,多余的拒绝来降低底层数据库的访问压力。
b.事前预防,构建可靠的redis缓存集群。主节点宕机了,将从节点切换至主节点,继续提供缓存服务。
缓存击穿
描述:针对某个热点数据的频繁访问请求无法在缓存中得到处理,大量请求发送到数据库,数据库访问压力陡增,影响其他访问请求
产生的原因:该种问题多发于热点数据过期访问失效的场景。
解决方案:对于此类热点数据不设置过期时间
缓存穿透
描述:要访问的数据既不在缓存中,也不在数据库中。导致请求在访问缓存时,缓存缺失,在访问数据库时,数据库中也没有要访问的数据。
产生的原因:
1. 业务层误操作,缓存中和数据库中的数据被删除了,所以导致都访问不到
2. 恶意攻击,专门访问数据库中没有的数据,如查询id为-1的数据。
解决方案:
1. 缓存空值或者缺省值。发送此类情况时,可以在redis中缓存一个空值或者缺省值(如默认为0),后续访问可以从redis获取而不是到数据库
2. 使用布隆过滤器先判断数据是否存在,来避免从数据库中查询是否存在,减轻数据库的压力。
布隆过滤器介绍:
描述:布隆过滤器由一个初始值为0的bit数组和N个哈希函数组成
操作流程:
(1)使用N个哈希函数分别计算这个数据的哈希值,得到N个哈希值
(2)把N个哈希值对bit数组的长度取模,得到每个哈希值在数组中的对应位置。
(3)最后把对应位置的bit位设置为1,完成布隆过滤器中标记数据的操作。
使用方法:查询某个数据时,使用上面的计算流程,计算该数据在bit数组中所有对应的位置,只要有一个位置不为1,就表明该数据未被标记过,则不去执行数据库的查询操作。
3. 前端请求检测,主要检测请求的合法性,包括请求参数是否合理,请求参数是否是非法值,请求字段是否存在等。
Redis缓存雪崩,击穿和穿透的更多相关文章
- Redis缓存雪崩、缓存穿透、缓存击穿、缓存降级、缓存预热、缓存更新
Redis缓存能够有效地加速应用的读写速度,就DB来说,Redis成绩已经很惊人了,且不说memcachedb和Tokyo Cabinet之流,就说原版的memcached,速度似乎也只能达到这个级别 ...
- redis缓存雪崩、穿透、击穿概念及解决办法
缓存雪崩 对于系统 A,假设每天高峰期每秒 5000 个请求,本来缓存在高峰期可以扛住每秒 4000 个请求,但是缓存机器意外发生了全盘宕机.缓存挂了,此时 1 秒 5000 个请求全部落数据库,数据 ...
- redis缓存雪崩,缓存穿透,缓存击穿的解决方法
一.缓存雪崩 缓存雪崩表示在某一时间段,缓存集中失效,导致请求全部走数据库,有可能搞垮数据库,使整个服务瘫痪. 使缓存集中失效的原因: 1.redis服务器挂掉了. 2.对缓存数据设置了相同的过期时间 ...
- SpringBoot微服务电商项目开发实战 --- Redis缓存雪崩、缓存穿透、缓存击穿防范
最近已经推出了好几篇SpringBoot+Dubbo+Redis+Kafka实现电商的文章,今天再次回到分布式微服务项目中来,在开始写今天的系列五文章之前,我先回顾下前面的内容. 系列(一):主要说了 ...
- Redis缓存雪崩、击穿、穿透
参考大佬 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难.作为一个在互联网公司面一次拿一次offer的面霸(请允 ...
- Redis 缓存雪崩、穿透、击穿
缓存雪崩 定义: 同一时间所有 key 大面积失效,比如网站首页的数据基本上都是同一批次去缓存的. 解决方法: ① 存的时候设定随机的失效时间. ② 服务做熔断处理(异常或着慢查询 Hystrix 限 ...
- [redis] -- 缓存雪崩和缓存穿透、缓存击穿问题解决方案篇
缓存雪崩 缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉 解决方案 事前:尽量保证整个redis集群的高可用性,发现机器宕机尽快补上.选择合适的内存淘 ...
- 第三节:Redis缓存雪崩、击穿、穿透、双写一致性、并发竞争、热点key重建优化、BigKey的优化 等解决方案
一. 缓存雪崩 1. 含义 同一时刻,大量的缓存同时过期失效. 2. 产生原因和后果 (1). 原因:由于开发人员经验不足或失误,大量热点缓存设置了统一的过期时间. (2). 产生后果:恰逢秒杀高峰, ...
- Redis缓存雪崩、缓存穿透、缓存击穿
缓存雪崩 Redis中的缓存数据是有过期时间的,当在同一时间大量的缓存同时失效时就会造成缓存雪崩. 解决方案 1.设置Redis中的key永不过期,缺点是会占用很多内存 2.使用Redis的分布式锁S ...
- Redis缓存雪崩、缓存穿透、热点Key解决方案和分析
缓存穿透 缓存系统,按照KEY去查询VALUE,当KEY对应的VALUE一定不存在的时候并对KEY并发请求量很大的时候,就会对后端造成很大的压力. (查询一个必然不存在的数据.比如文章表,查询一个不存 ...
随机推荐
- Canvas:路径
路径的概念 路径是从起始点到结束点之间的连线.个人认为,二维画布中分为线性图形和非线性图形,线性图形包括矩形.直线.曲线.圆形等各种几何图形:非线性图形包括图象.文本.像素.线性图形中又分为路径和非路 ...
- AOP 编程
1.静态代理 定义一个接口,用以规定执行方法 public interface IOrderProcessor { void Submit(); } 实现执行方法 public class Order ...
- 时钟切换电路(无毛刺)——clock switching glitch free
0.引言 随着越来越多的多频时钟被应用在今天的芯片中,尤其是在通信领域中,经常需要在芯片运行时切换时钟线的源时钟.这通常是通过在硬件中复用两个不同的频率时钟源,并通过内部逻辑控制多路选择器选择线来实现 ...
- 问题记录——mysql服务忘记root密码后加skip-grant-tables 跳过权限认证参数启动报错处理
问题描述: 误操作将root密码重置后root原先密码登录不上,加skip-grant-tables 参数数据库启动失败,排查错误日志如下: 由于Mysql节点用到了半同步复制,尝试把半同步参数去掉试 ...
- 2373. 矩阵中的局部最大值 (Easy)
问题描述 2373. 矩阵中的局部最大值 (Easy) 给你一个大小为 n x n 的整数矩阵 grid . 生成一个大小为 (n - 2) x (n - 2) 的整数矩阵 maxLocal ,并满足 ...
- 2022-05-31内部群每日三题-清辉PMP
1.由于项目执行期间的范围变更,项目经理确定供应商必须对一个已在使用的产品模块进行更改.项目经理首先做什么? A.准备一份变更请求,以更新供应商的合同条款 B.检查采购管理计划和合同条款 C.将该信息 ...
- CVE-2013-2566 SSL/TLS RC4 信息泄露漏洞 修复方案
详细描述 安全套接层(Secure Sockets Layer,SSL),一种安全协议,是网景公司(Netscape)在推出Web浏览器首版的同时提出的,目的是为网络通信提供安全及数据完整性.SSL在 ...
- PHP安装SOAP扩展调用webservice获取数据
报错内容: 调用方式: 错误原因: URL未加后缀?WSDL导致异常,加入后异常问题解决.
- SpringBoot 块形式的配置文件写法(简单示例)
1.配置文件写法 spring: profiles: dev quartz: auto-startup: true --- spring: profiles: local quartz: auto-s ...
- 关于ie浏览器query ajax提交单个操作无效
第一次写博客 大家不要喷我!!!! 需求需要开发一个无刷新的用户注销和恢复注销功能 遇到的实际问题直接贴图----> 这是开始页面 当点击红xx时提示修改成功 这里似乎是对的哈 但是等点击刷新的 ...