redis中缓存雪崩,缓存穿透,缓存击穿的原因以及解决方案

文章探讨了Redis缓存中的三种问题:雪崩、穿透和击穿,以及相应的解决策略。对于缓存雪崩,提出了加锁或使用队列的方法,以及设置key永不过期和使用集群提高可用性。缓存穿透可通过布隆过滤器减少无效查询。而缓存击穿的解决方案是采用A/B双缓存,利用差异失效时间来防止热点key导致的数据库压力。

一  redis的缓存雪崩

1.1 缓存雪崩

在redis中,新,旧数据交替时候,旧数据进行了删除,新数据没有更新过来,造成在高并发环境下,大量请求查询redis没有数据,直接查询mysql,造成mysql的压力骤增,给mysql造成极大的压力,造成一连串的后续异常反应。

1.2 解决办法

1.大多数系统设计者考虑用加锁(最多的解决方案)或者队列的方式保证来保证不会有大量的线程对数据库一次性进行读写。

2.redis中的key设置永不过期;3.redis的集群实现高可用。主从+哨兵

二 缓存穿透

2.1 缓存穿透

在redis中,查询redis数据不存在,查询mysql也不存在,造成两次无用的查询。造成额外不必要的开销

2.2 解决办法

使用布隆过滤器,Bloom-Filter一般用于在大数据量的集合中判定某元素是否存在。最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。

三 缓存击穿

3.1 缓存击穿

在redis中,一开始热点key,redis缓存,mysql中均可查询到,突然某种原因,key失效后,查询redis,mysql均不存在,造成请求大量访问mysql,存在mysql崩溃的风险。

3.2 解决办法

使用A,B双缓存,差异失效时间;更新时,先B后A,查询时,先A后B,解决热点key失效问题,造成缓存击穿。

四  总结

五 缓存预热

5.1 预热

将需要的数据提前缓存到缓存redis中,可以在服务启动时候,或者在使用前一天完成数据的同步等操作。保证后续能够正常使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值