【Redis】11.缓存穿透和雪崩

一.缓存穿透(查不到)

用户很多的时候,缓存都没有命中(秒杀),于是都去请求了持久层数据库。

这会给持久层数据库造成了很大的压力,相当于出现了缓存穿透。

解决方案:

1.布隆过滤器是一种数据结构,对所有可能查询的参数以hash形式存储,

在控制层先进行校验,不符合则丢弃,从而避免了对底层存储系统的查询压力

2.缓存空对象,当存储层不命中时候,将返回的空对象也将其缓存起来,

同时设置一个过期时间,保护了后端数据源。

二.缓存击穿(量太大,缓存过期)

缓存击穿是指一个key热点(比如微博),有大量的请求并发访问,由于缓存过期

会同时访问数据库来查询最新数据,并且写会缓存,会导致数据库瞬间压力过大。

解决方案:

1.设置热点数据永不过期

2.加互斥锁

使用分布式锁,保证对于每个key同时只有一个线程去查询后端服务

 

三.缓存雪崩

缓存雪崩,指的是缓存集中过期失效,Redis宕机。

比如双十一,很快迎来一波抢购,这波商品时间比较集中的放入了缓存,

假设缓存一个小时。到了凌晨一点的时候,这批商品的缓存就都过期了

而对这波商品的访问查询,都落在了数据库上。对数据而言,就会产生周期性的压力波峰。

造成存储层也会挂掉的情况。

解决方案:

1.redis高可用

2.限流降级

解决方案思想:缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。

3.数据预热

正式部署之前,可能的数据都访问一遍。

学习来自b站狂神说

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值