• redis探索之缓存击穿、缓存雪崩、缓存穿透


            在如今的互联网环境中,似乎每个系统都会用到缓存,大数据横行,大量数据因为着传统的mysql硬盘查询会变成系统瓶颈。所以我们引入缓存的目的就是提高系统响应速度,提高吞吐量。将热门数据放入缓存降低查库次数。既然缓存举足轻重,那么应用缓存时,遇到的问题和解决办法,就变成了程序员必备、面试必会。

            系统中使用的基本缓存逻辑

    第一板斧:缓存穿透

            缓存穿透是指查询一个压根不存在的数据。因为缓存中并不存在,所以请求会查询数据库,由于不存在数据,也不会存入缓存。

    解决办法

            1.缓存空值:这个很简单,也很容易想到,有问题的数据我也给你存在缓存中,告诉缓存,它是有问题的,别往后边传了。避免请求穿透缓存发到数据库。

            2.采用布隆过滤器:使用bloom过滤器,将数据库数据,映射在布隆过滤器。作为第一道安全门,过滤无效请求。

    第二板斧:缓存击穿

            缓存击穿是指一个Key热点缓存数据在某个时间点过期后,恰好这个时间有大量请求查询这个Key,这些请求就都被发送到数据库。

     

            解决办法

                    提前将热点数据放置到缓存,并且设置永不过期或者使用定时任务刷新缓存数据与过期时间。

                    使用分布式锁,保障在缓存失效时不会大量并发都发送到数据库。

            缓存穿透与缓存击穿的区别

                    缓存穿透请求的是缓存中没有,数据库中也没有的数据,加上大量的并发,导致的系统瘫痪。

                    缓存击穿请求的是缓存中没有,但是数据库中有的数据。

    第三板斧:缓存雪崩

            缓存雪崩是指缓存中的key在同一时间大面积失效,导致大量请求发送到数据库。是缓存击穿的特殊情况。

            常见的原因是:1.redis服务器挂了;2.大量缓存数据设置了相同的过期时间,在某个时间点暴雷。

            解决办法

                    将过期时间分散开,设置为固定时间+随机数,减少一起过期的可能性。

                    使用锁或消息队列,限制并发量。

                    设置多级缓存,像CPU三级缓存那样,层层筛选。

  • 相关阅读:
    案例驱动,手把手教你学PyTorch(二)
    计算机毕业设计之java+springboot基于vue的地方美食分享网站
    2022最新版Redis入门到精通(云课堂视频学习笔记)
    js函数相关知识详解
    【Hack The Box】windows练习-- Bounty
    第一章 计算机网络概论
    RabbitMQ中Direct交换机的用法
    tcp丢包的排查
    Django的模版使用(Django-03)
    社交媒体与社会网络分析,深度解读社交网络营销
  • 原文地址:https://blog.csdn.net/qq_22156459/article/details/125478931