Redis缓存穿透、击穿、雪崩介绍

面试高频,工作常用

Redis缓存穿透、击穿、雪崩介绍_第1张图片

缓存穿透(查不到)

概念
用户想要查询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库查询。发现也没有,于是本次查询失败,当用户很多的时候,缓存都没有命中(秒杀),于是都去请求了持久层数据库。这就会给持久层数据库造成大压力,这时候就相当于出现了缓存穿透。

解决方案
布隆过滤器
布隆过滤器是一种数据结构,对所有可能查询的参数以hash形式存储,先在控制层进行校验,不符合规则丢弃,从而避免了对底层存储系统的查询压力
缓存空对象
当存储层不命中后,即使返回空对象也将其缓存起来,同时会设置一个过期时间,之后在访问这个数据将会从缓存中获取,保护了后端的数据源
但是这个方法存在两个问题
1.如果空值能被缓存下来,这就意味着缓存需要更多的空间存储更多的键,因为这个当中可能会有很多的空值和键
2.即使对空值设置了过期时间,还会存在缓存层和存储层的数据会有一段时间窗口不一致,这对于需要保持一致性的业务会有影响

缓存击穿(查的多,过期)

微博服务器宕机(热点)
缓存击穿是指一个key非常热点,不停的扛着大量并发,大并发集中对这个点进行访问,当key在这个瞬间失效,持续的大并发就穿破缓存,直接请求数据库,就像在一个屏障上凿开了一个洞。
当某个key在过期的瞬间,有大量请求并发访问,这类数据一般是热点数据,由于缓存过期,会同时访问数据库来查询最新的数据,并且回写缓存,会导致数据库压力瞬间过大。

缓存雪崩

是指在某个时间段,缓存集中过期失效。redis宕机
缓存雪崩的原因之一,比如写文本时,马上就要到双十二零点,很快就迎来一波抢购,这波商品比较集中的放入了缓存假设缓存缓存一个小时。到凌晨一点钟,这批商品的缓存就都过期了。而对于这批商品的查询访问都落到数据库上,数据库产生周期性的压力波值。于是所有的请求都会达到存储层,存储层的调用量就会爆增,造成存储器也会挂掉的情况。
其实集中过期不是最致命的,比较致命的缓存雪崩是缓存服务器某个节点宕机或者断网。因为自然原因形成的缓存雪崩,一定是在某个时间段集中创建缓存,这个时候数据库也会顶住压力,无非是对数据库产生周期性的压力而已。而缓存服务节点的宕机,对数据库服务器造成的压力是不可预知的,很有可能瞬间就把数据库压垮。
双十一:停止一些服务。如退款(保证主要服务可用)
解决方案
1.redis高可用
2.限流降级
3.数据预热

你可能感兴趣的:(redis,缓存,redis,数据库)