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


    面试高频,工作常用

    在这里插入图片描述

    缓存穿透(查不到)

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

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

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

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

    缓存雪崩

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

  • 相关阅读:
    git仓库-客户端软件安装配置过程
    uniapp公共css
    LINUX如何 部署ansible
    FastJson TemplatesImpl利用链详细调用学习
    易基因|宏病毒组测序技术介绍
    springboot+电影售票小程序 毕业设计-附源码201532
    Kafka 生产者应用解析
    Linux中SAMBA服务管理与搭建
    二三里APP逆向- 国庆篇
    个税计算、税基的处理
  • 原文地址:https://blog.csdn.net/G823909/article/details/127618529