redis雪崩、穿透、击穿

本文介绍了缓存系统中常见的三种问题:雪崩、穿透和击穿,以及针对这些问题的解决方案。雪崩是大量缓存同时失效导致数据库压力过大;穿透是指请求的数据在缓存和数据库都不存在,反复查询数据库;击穿则是热点key失效时,大量请求直接命中数据库。解决方案包括设置随机过期时间、使用Redis集群、布隆过滤器、设置永不过期等策略。
摘要由CSDN通过智能技术生成

正常网络请求如下:
在这里插入图片描述

雪崩

定义:大量缓存在同一时间失效,请求全部落在数据库,导致数据库挂了
事例:淘宝首页N多热点数据设置的缓存过期时间是同一个时间点,当高峰期的时候涌入一大批请求,这个时候缓存过期了,则这一大批量请求落在数据库

解决方案
1、设置不同的过期时间,如随机过期时间
2、设置redis集群,热点数据分布在不同的服务器节点上
3、定时job去更新缓存
4、不设置缓存过期时间 (基本Pass,缓存很占内存)

穿透

定义:一直访问一个缓存和数据库都不存在的数据,导致数据库奔溃
事例:数据库 id 是从 1 开始的,结果黑客发过来的请求 id 全部都是负数。这样的话,缓存中不会有,请求每次都“视缓存于无物”,直接查询数据库。

解决方案
1、无论mysql是否有值,都设置缓存
2、参数合法性验证
3、使用布隆过滤器
4、异常ip直接拉黑
5、限制每秒网站最高访问量

击穿

定义:某个 key 非常热点,访问非常频繁,处于集中式高并发访问的情况,当这个 key 在失效的瞬间,大量的请求就击穿了缓存,直接请求数据库
案列: 双十一秒杀一双鞋,缓存突然过期了,来抢购的请求均落在数据库

解决方案:
1、将热点数据设置为永远不过期
2、使用redis互拆锁,等待第一个请求构建完缓存之后,再释放锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值