11-Redis穿透击穿和雪崩

redis缓存穿透和雪崩

image-20220421172906894

缓存击穿

指的是一个非常热的key 一直有非常大流量的并发访问,当缓存中key失效过期的瞬间,所有的访问量瞬间击破缓存,所有请求瞬间全部访问到数据库,

例: 微博某个热搜,刘畊宏直播,

大量的访问量直接访问到后端数据库 同时数据库还要会写到缓存,导致数据库压力很大甚至崩溃。

决方案:

1.热key缓存永不过期 ,防止缓存过期打到数据库

2.分布式锁:一个线程获取,其他线程等待,防止后端数据库崩溃

缓存穿透

当用户访问一个数据 缓存中没有,缓存没命中,所以向持久层数据库查询

也没有 本次查询失败,但是当大量没用命中访问量都去访问数据库持久层的时候,数据库压力很大 缓存也就失效了 相当于缓存穿透。

例:秒杀活动,双十一 618购物街,短时内大量点击率抢购数量有限的商品,会出现大量查询失败,

解决办法:

1.布隆过滤器 、

2.存储空对象:数据库没找到后,redis中临时存一个空对象(空对象多了也会占用内存)

缓存雪崩

缓存中的key都是有失效时间的 ,缓存雪崩指的是 某个时间点,缓存集体失效,redis缓存失去了作用。

第二种情况是 缓存服务器down机 自然形成了雪崩的情况。

例: 双十一商品 都是提前加载到缓存,到凌晨开始抢购的时候,缓存都过期了了当雪崩的时候没有一片雪花是无辜的,每个key失效都不是问题,但是所有key集体失效,会造成所有的访问直接打到了持久层数据库,数据库访问调用暴增。

解决方案:

1.redis高可用:多设置几台redis

2.限流降级:缓存失效后,通过加锁或者队列来控制读数据库写缓存的数量

3.数据预热:大量数据加载到缓存中,根据不同访问量来设置不同过期时间,防止大面积集体过期

posted @ 2022-04-26 15:22  机猿巧合  阅读(27)  评论(0编辑  收藏  举报