浅析缓存穿透、击穿、雪崩及解决方案 & 布隆过滤器&Redis 集群

缓存穿透、击穿、雪崩

穿透

记录——大量查询,缓存中没有记录且数据库中也没有记录,请求绕过缓存,打到DB上,MySQL并发连接1k左右,将会冲垮DB...

原因:缓存服务器故障、用户恶意请求

解决方案:

  • 增加校验,拦截非法请求

  • 缓存 key <——> null 减少大量空对象的缓存,有效时间设短些、防同一用户暴力攻击

  • 布隆过滤、提前拦截

  • 建立数据标识仓库:数据映射Hash值,然后将Hash值存到Redis中!可能出现部分数据Hash相同、而需要落到DB查询!

Bloom Filter 扩展:

当一个元素被加入集合时,通过K个散列函数将这个元素映射成一个位数组中的K个点,把它们置为1。检索时,我们只要看看这些点是不是都是1就(大约)知道集合中有没有它了:如果这些点有任何一个0,则被检元素一定不在;如果都是1,则被检元素很可能在。这就是布隆过滤器的基本思想。

更详细的布隆过滤器知识

击穿

缓存中没有数据库中有,原本缓存服务器存在这个key,在请求到来前恰好失效,那么多这个key的请求会落到DB上,称之为缓存击穿!

解决方案

  • 热点数据不过期

  • 加互斥锁(仅允许一个用户去DB查询,其他等待!拿到后写入缓存,其他用户再取缓存中的数据)

雪崩

一段时间内大量cache失效,大量查询失效的cache直接落到DB,导致数据库性能降低,压力骤增或者宕机!

原因: redis重启;缓存设置了相同的过期时间

解决方案

  • 合理的规划缓存失效时间

  • 搭建redis集群,保证高可用

 

  • 对DB控制并发访问

  • 多级缓存

  • 快速失败的熔断策略,减少 DB 瞬间压力;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值