首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
大数据
›
数据仓库与分析
›
Redis数据库——Redis雪崩、穿透、击穿
返回列表
发新帖
Redis数据库——Redis雪崩、穿透、击穿
[复制链接]
发表于 2025-11-14 07:20:41
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
本文先扼要先容为什么须要利用Redis,以及逾期键的删除计谋,进而具体先容Redis雪崩、穿透、击穿的发生场景和办理方案。
前情提要
为什么利用redis?
进步
性能
:缓存査询速率比
数据库
查询速率快(内存Vs硬盘);
进步井发本领:缓存分担了部门哀求,支持更高的并发。
Redis 的逾期键删除计谋
Redis 为管理内存,对设置了逾期时间的键接纳了以下三种删除计谋:
定时逾期
:
形貌
:为每个设置了逾期时间的键创建一个定时器,到达逾期时间立刻打扫。
长处
:对内存很友爱,逾期数据能及时打扫。
缺点
:须要斲丧大量的 CPU 资源来处理惩罚定时器,影响缓存相应时间和吞吐量。
惰性逾期
:
形貌
:只有在访问某个键时才判定其是否逾期,逾期则打扫。
长处
:最大化节省 CPU 资源。
缺点
:大概会有大量逾期键未被访问而占用内存。
定期删除
:
形貌
:每隔肯定时间扫描 expires 字典中的部门键,打扫逾期键。
长处
:折中计谋,通过调解扫描时间隔断和每次扫描数量,平衡 CPU 和内存资源。
默认利用惰性逾期 (Lazy Expiration)和定期删除 (Periodic Deletion)两者团结的方式,可以或许在
性能
和内存利用之间找到一个良好的平衡。
数据读取流程
Redis 的数据读取通常遵照以下步调:
缓存掷中
:如果数据在缓存中存在,直接从缓存中读取。
缓存未掷中
:如果缓存中没有数据,则查询
数据库
,获取数据后写入缓存供下次利用。
三种题目及办理方案
缓存雪崩
:告急办理缓存大规模失效题目,焦点在于错峰和高可用。
缓存穿透
:告急办理哀求不存在数据的题目,焦点在于布隆过滤器和空值缓存。
缓存击穿
:告急办理热门数据失效题目,焦点在于互斥锁和逻辑逾期。
1. 缓存雪崩
界说
:在某一时间段内,
缓存会集逾期
或 Redis 服务宕机,导致大量哀求直接涌向
数据库
,大概引发数据库瓦解。
缘故起因
:
内存昂贵且有限,以是Redis须要给数据设置逾期时间,将逾期键数据删除。
缓存中的大量数据设置了雷同的逾期时间,导致会集失效。
缓存服务宕机或瓦解,全部缓存失效。
办理方案
:
键值——缓存失效时间错峰
:
给缓存的逾期时间增长一个随机值,镌汰同一时间段的缓存同时逾期。
SET key value EX 300 + random(60) # 过期时间加随机值
复制
代码
事发前——Redis 高可用架构
实现 Redis 主从架构或 Redis Cluster,克制单点故障。
利用 Sentinel(哨兵)举行故障转移,只管克制Redis挂掉这种情况发生。
事发中——当地缓存和限流
在 Redis 宕机时,启用当地缓存(如 Ehcache)。
通过限流(如 Hystrix)掩护数据库(最少能包管我们的服务照旧能正常工作的)。
事发后——Redis 长期化
开启 RDB 或 AOF 长期化,重启后主动从磁盘上加载数据,快速规复缓存数据。
2. 缓存穿透
界说
:用户哀求的键在缓存和数据库中都不存在,导致每次哀求都会直接访问数据库。
为什么说
键在数据库中也不存在
呢?
由于如果键在数据库中存在,第一次掷中,就会写入缓存,下次就不会哀求到数据库,不属于缓存穿透
缘故起因
:
恶意攻击:通过大量哀求不存在的键对体系举行攻击。比方 ID 为负数或不存在的用户数据。
数据不全:一些正常哀求由于数据未掷中而直接访问数据库。
办理方案
:
布隆过滤器
:
在缓存前引入布隆过滤器,用于判定哀求的键是否
大概
存在:
如果布隆过滤器判定不存在,直接返回,无需访问缓存和数据库。
如果布隆过滤器判定大概存在,再访问缓存或数据库。
# 添加数据到布隆过滤器
BF.ADD filter "valid_key"
# 查询数据是否存在
BF.EXISTS filter "invalid_key" # 返回 false,直接拦截请求
复制
代码
缓存空值
:
当查询结果为空时,将空值存入缓存,并设置较短的逾期时间。
SET key "null" EX 60 # 缓存空值 60 秒
复制
代码
这种情况我们一样寻常会将空对象设置一个较短的逾期时间(时间太长的话,万一数据库中已经有数据了,但是长时间掷中redis发现没有数据,导致用户拿不到数据)。
参数校验
:
对输入的参数举行校验,克制无效哀求到达后端。
限流防护
:
对频仍哀求不存在键的客户端举行限定,防止恶意攻击。
3. 缓存击穿
界说
:当缓存中某个高频访问的
热门键逾期
时,大量哀求同时到达数据库,造成数据库压力骤增。
场景
:
一个热门数据被大量访问,且缓存忽然失效,失效后哀责备部打到数据库。
办理方案
:
热门键永不外期
:
热门键不设置逾期时间,直接通过覆盖更新来保持数据划一性。
加互斥锁
:
利用 Redis 或 Zookeeper 的
分布式锁
,控制只有
一个线程能访问数据库并更新缓存
,别的线程等候。
SET lock:key "unique_value" NX EX 10 # 设置分布式锁
复制代码
热门键限流
:
对热门键的哀求举行限流,克制短时间内大量哀求涌入。
热门数据分片
:
将热门数据分散到差别的 Redis 节点或分布式服务中,镌汰单点压力。
对比总结
题目
界说
缘故起因
办理方案
缓存雪崩大量缓存数据同时失效,导致哀求会集打到数据库或服务缓存失效时间划一,缓存服务宕机错峰失效、缓存预热、高可用集群、限流降级缓存穿透哀求的键既不在缓存中,也不在数据库中恶意攻击、数据不全布隆过滤器、空值缓存、参数校验、限流防护缓存击穿热门数据缓存失效时,大量哀求同时查询该数据热门数据失效,大量哀求会集到数据库互斥锁机制、逻辑逾期、哀求分流、分布式限流
回复
使用道具
举报
返回列表
浏览过的版块
人工智能
移动端开发
网络安全
何小豆儿在此
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表