• 【Redis】理论进阶篇------浅谈Redis的缓存穿透和雪崩原理


    一、缓存穿透

    1、概念

    缓存穿透(查不到数据),是指当用户想要查询数据的时候,会先去Redis中取命中,如果Redis中没有该数据,那么就会向数据库中去查找数据。如果数据库中也没有,则该次查询结果失败。但是当我们的用户增多或者用户源源不断的发起请求,redis中也没有命中,全去访问了持久层数据库,这就会导致数据库造成很大的压力,这时候就相当于出现了缓存穿透。

    be1d996bf094498297036d816e2bbf29.png如图所示:Client发送请求,若Redis中没有,就把所有请求转向MySQL数据库,当请求增多,MySQL压力增大,就会出现缓存穿透现象。

    2、解决方法

    ①:布隆过滤器(BloomFilter)

    布隆过滤器是一种数据结构,对所有可能查询的参数以hash形式存储,先在控制台进行校验,不符合则丢弃,从而避免对底层数据库的压力。

    ca8892e5705e46129f532edce7301857.png

    布隆过滤器作用是判断数据是否存在集合之中,正好和Redis这个缓存的场景相同,如图所示,当我们的数据到Redis之前先在BloomFilter检验,如果数据不符合规范,就丢弃,减少对数据库的压力。

    ②:缓存空对象

    当存储层不被命中后,即使返回一个空对象也将其缓存起来,同时设置一个过期时间,之后再访问这个数据会从缓存中取,保护了后端的数据源。

    06b9fa063484476a873f67405b8e4032.png

    缺点:

    a.如果空值被缓存起来,则缓存需要更多的空间存储更多的键(会有更多空的键);

    b.即使设置了过期的时间,还是会在缓存层和存储层的数据会有一段时间窗口不一致,这对需要保持一致性的业务会有影响。

    二、缓存击穿

    1、概念

    缓存击穿(查询的量太大),是指一个key非常热点,在不断的扛着大并发,大并发集中的对这个点进行访问,当这个key在失效的瞬间,持续的大并发就穿透了缓存,直接请求数据库,由于是热点数据,数据量很大,在缓存过期的同时,大量数据访问我们数据库,并且回写到缓存,会导致数据库瞬间压力过大。

    2、解决方法

    ①:设置热点数据永不过期

    从缓存的层面来看,没有设置过期时间,所以不会出现热点key过期后产生的问题。

    ②:加互斥锁

    分布式锁:使用分布式锁,保证对于每个key同时只有一个线程去查询后端服务,其他线程没有收获分布式锁的权限,因此只需要等到即可。这种方式将高并发的压力转移到了分布式锁上,因此对分布式锁的考验很大。如下图所示:

    f4f282944a47455a98c0a8a0361fe3a1.png三、缓存雪崩

    1、概念

    缓存雪崩,是指在某一个时间段,缓存集中过期失效,redis宕机了。

    如下图所示:

    868823b8a7ad48bc97730784136baaef.png

    2、解决方法

    ①:Redis的高可用

    既然redis可能挂掉,那我们就可以多设置几台redis,搭建一个集群,这样一来一台机器挂掉后其他的还可以继续工作。

    ②:限流降级

    在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询寻数据和写缓存,其他线程等待。

    ③:数据预热

    数据加热的含义就是正式部署之前,我们把可能的数据预先访问一遍,这样部分可能大量访问的数据就会加载到缓存中。在即将发生大并发前动手加载缓存中不同的key,设置不同的过期时间,让缓存的时间点尽量均匀。

    四、总结

          这部分的内容是对b站up主【狂神说Java】内容的总结,这里只是讲解了大概的原理,让大伙知道有这些情况,那后期呢,博主会再出一期详细的博客,讲解关于这些情况的具体实例以及一些相关算法讲解。如果对屏幕前的小伙伴有所帮助,不要忘记,点赞👍,支持博主一波哦!

     

  • 相关阅读:
    使用conda管理虚拟环境
    JAXB实现xml到bean录入数据库
    A1S65B-S1 A1S61PN A1SJ51T64 机器人的优点和缺点
    【stack题解】最小栈 | 栈的压入、弹出序列
    基于智能远程监考方案,云上组考打造考试新范式
    【数据结构】单链表之--无头单向非循环链表
    交易机器人-微信群通知
    [附源码]计算机毕业设计JAVAjsp高校学院主页系统
    为何要实现发票信息的数字化管理?
    全屋Wi-Fi:一个谁也解决不好的痛点?
  • 原文地址:https://blog.csdn.net/qq_51933234/article/details/136184581