【夯实Redis】缓存穿透?缓存击穿?缓存雪崩?

目录

一、缓存穿透

二、缓存击穿

三、缓存雪崩


一、缓存穿透

        缓存穿透是指缓查询一个数据库一定不存在的数据

        如果如果查询一个不存在的key,此流程会查询一次Redis缓存,再查询一次DB。

        如果短时间内出现大量请求,那么会对我们的Redis缓存系统以及数据库造成巨大的压力,甚至宕机。

        解决方案:

      (1)为不存在的KEY也设置一个"空字符串"到缓存里面去,并设置过期时间。这样下次在查询相同KEY的时候,在缓存失效之前查询缓存。

      (2)打垮数据库的还是在短时间内出现了大量的请求,所以可以使用限流组件来限流。                                             

       

二、缓存击穿

         缓存击穿是指在缓存失效的瞬间,有大量的请求直接请求到数据库。

         解决方案:

      (1)如果缓存数据几乎不会变化:设置热点数据永远不过期。

      (2)如果缓存数据更新不频繁,那么可以使用分布式互斥锁,在缓存失效的时候,只允许少量请求访问到数据库,并重新构建缓存。

      (3)如果缓存数据更新频繁或者构建困难,那么就可以使用定时任务定时重新构建缓存,也能保证热点数据永不失效。

三、缓存雪崩

        缓存雪崩是指缓存系统热点数据全部失效,所有请求直接打在数据库上,导致缓存系统宕机。或者是大量热点数据到期时间差不多,短期内请求特别大,也可能导致数据库宕机。

                            

        解决办法

      (1)Redis高可用。主从 + 哨兵

      (2)限流。设置分布式互斥锁。对于一个KEY,只允许一个线程查询数据库,其它线程需要等待。这样可以减少DB的请求压力。

        (3)   数据预热。上线之前把热点数据就加载到缓存中,并为热点数据的过期时间增加随机数,防止在同一时间同时失效。

 

参考文章:缓存穿透、缓存击穿、缓存雪崩区别和解决方案

                  了解什么是 redis 的雪崩、穿透和击穿?Redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 Redis 的穿透?

阅读更多 

        跟着大宇学Redis--------目录帖

posted @ 2022-07-17 12:13  小大宇  阅读(8)  评论(0编辑  收藏  举报