当前位置:网站首页>Linux之Redis 缓存雪崩,击穿,穿透
Linux之Redis 缓存雪崩,击穿,穿透
2022-08-04 07:41:00 【1 2 3 一起追梦】
1、缓存雪崩
1.1 造成原因
一、 简单来说就是当时设计缓存时存在问题,导致大部分缓存数据在相同时间内,大量过期。这样就会把压力全部给了数据库。
二、Redis 缓存实例发生故障宕机。
1.2 解决方案
1、解决热点数据集中失效
针对大量数据集中失效带来的缓存雪崩问题,可以用下面几种方案解决:
- 均匀过期:给热点数据设置不同的过期时间,给每个key的失效时间加一个随机值;
- 设置热点数据永不过期:不设置失效时间,有更新的话,需要更新缓存;
- 服务降级:指服务针对不同的数据采用不同的处理方式:
- 业务访问的是非核心数据,直接返回预定义信息、空值或者报错;
- 业务访问核心数据,则允许访问缓存,如果缓存缺失,可以读取数据库。
2、解决Redis实例宕机问题
方案一: 实现服务熔断或者请求限流机制
我们通过监测Redis以及数据库实例所在服务器负载指标,如果发现Redis服务宕机,导致数据库的负载压力增大,我们可以启动服务熔断机制,暂停对缓存服务的访问。
但是这种方法对业务应用的影响比较大,我们也可以通过限流的方式降低这种影响。
举个例子:比如业务系统正常运行时,请求入口每秒最大允许进入的请求数是1万个,其中9000请求个可以被缓存处理,余下1000个会发送给数据库处理。
一旦发生雪崩,数据库每秒处理的请求突然增加到1万个,此时我们就可以启动限流机制。在前端请求入口处,只允许每秒进入1000个请求,其他的直接拒绝掉。这样就可以避免大量并发请求发送给数据库。
方案二:事前预防
通过主从节点的方式构建 Redis 缓存高可靠集群。 如果 Redis 缓存的主节点故障宕机了,从节点还可以切换成为主节点,继续提供缓存服务,避免了由于缓存实例宕机而导致的缓存雪崩问题。
2、缓存穿透
2.1 造成原因
缓存穿透指用户要访问的数据既不在缓存中也不在数据库中,导致用户每次请求该数据时都要去数据库查一遍,然后返回空。如果有恶意攻击者不断请求这种系统不存在的数据,会导致数据库压力过大,严重会击垮数据库。
2.2 解决方案
- 接口层增加校验:用户鉴权、参数校验(请求参数是否合法、请求字段是否不存在等等);
- 缓存空值/缺省值:发生缓存穿透时,我们可以在Redis中缓存一个空值或者缺省值(例如,库存缺省值为0),这样就避免了把大量请求发送给数据库处理,保持了数据库的正常运行。这种方法会存在两个问题:
- 如果有大量的Key穿透,缓存空对象会占用宝贵的内存空间。针对这种情况可以给空对象设置过期时间。设置过期时间之后,可能会有缓存与数据库不一致的情况。
- 布隆过滤器:快速判断数据是否存在,避免从数据库中查询数据是否存在,减轻数据库压力。
3、缓存击穿
3.1 造成原因
某个热点 key,在缓存过期的一瞬间,同时有大量的请求打进来,由于此时缓存过期了,所以请求最终都会走到数据库,造成瞬时数据库请求量大、压力骤增,导致数据库存在被打挂的风险。
3.2 解决方案
1.加互斥锁。当热点key过期后,大量的请求涌入时,只有第一个请求能获取锁并阻塞,此时该请求查询数据库,并将查询结果写入redis后释放锁。后续的请求直接走缓存。
2.设置缓存不过期或者后台有线程一直给热点数据续期(redission)。
边栏推荐
- 电脑系统数据丢失了是什么原因?找回方法有哪些?
- 尚医通【预约挂号系统】总结
- 两日总结八
- 无人驾驶运用了什么技术,无人驾驶技术是
- 开发小技巧 navicate如何点击单元格显示全部的文本内容或通过图像查看内容
- Distributed Computing Experiment 2 Thread Pool
- 24.循环神经网络RNN
- 金仓数据库KingbaseES客户端编程接口指南-JDBC(9. JDBC 读写分离)
- 全国职业院校技能大赛网络安全竞赛之应急响应
- Distributed Computing Experiment 3 PRC-based Book Information Management System
猜你喜欢
随机推荐
powershell和cmd对比
IntelliJ新建一个类或者包的快捷键是什么?
DWB主题事实及ST数据应用层构建,220803,,
华为设备配置VRRP与路由联动监视上行链路
LeetCode每日五题01:两数之和 (均1200题)
在GBase 8c数据库后台,使用什么样的命令来对gtm、dn节点进行主备切换的操作?
字节跳动岗位薪酬体系曝光,看完我真的酸了...
【学习笔记】AGC036
研究性学习专题 3_LL(1)语法分析设计原理与实现
data:image/jpg;base64格式数据转化为图片
华为设备配置VRRP与NQA联动监视上行链路
MYSQL JDBC图书管理系统
ExoPlayer添加Ffmpeg扩展实现软解功能
2022的七夕,奉上7个精美的表白代码,同时教大家改源码快速自用
QT + msvc2017编译器
设计信息录入界面,完成人员基本信息的录入工作,
【学习笔记】状压dp
【论文笔记】—低照度图像增强—Supervised—RetinexNet—2018-BMVC
一天学会JDBC03:Statement的用法
千古第一文人苏轼的众CP