redis缓存雪崩 缓存击穿和缓存穿透的分析及规避方案的梳理

    科技2024-08-15  29

    大部分开发过程中都会用到redis缓存,那么在使用的过程中,需要关注的点是什么呢?常见的引发db 宕机的现象是redis缓存雪崩 缓存击穿和缓存穿透。下面详细介绍一下 一、正常流程

    二、缓存雪崩  

    情况一:某一时间,大量的缓存key同时失效,导致大量的请求全部打到数据库,造成数据库宕机等。(大批量热点数据过期后,高并发请求,直接请求到db,引起db压力造成查询阻塞甚至宕机。)

    情况二:redis挂掉,导致请求都到db了

    规避方案:

    情况一:

    1、在设置缓存时 随机设置缓存的失效时间 使得在某一时间 不会造成大量redis缓存失效

    2、不设置缓存失效时间 (暴力操作)

    情况二:

    1、加一层本地ehcache缓存。也就是请求进来先查ehcache缓存,ehcache没有的话去查redis,redis也没有再去db。这时候redis挂了,但是我们本地ehcache还有,所以不会打到db层

    2、限流组件,可以设置每秒最大请求数,超过最大请求数的那些请求怎么办?走降级!可以返回一些默认值,或者友情提示啥的。

    三、缓存穿透  

    一些用户的操作导致查询redis和db中都没有的key,如果这个Key的并发量比较大的话 会导致db挂掉甚至影响性能(这些用户 一般是恶意的用户)

    规避方案:

    1、不管数据库里有没有这个key 都将这个key缓存到redis中

    2、将对应的ip拉黑

    3、对入参进行合法校验 不合法的参数 直接返回空

    4、采用布隆过滤器

    四、缓存击穿  

    某一热点的key在某一时间突然缓存失效,导致大量的请求打到数据库上 导致数据库垮掉

    规避方案:

    1、该key设置为永久不失效

    2、分布式锁 当第一个用户拿到这个锁之后,让其他用户先睡几秒,如果db中查询到该key,则将该key缓存到reids中,其他用户直接去访问redis即可,这样就减少了db的访问量

     

    Processed: 0.009, SQL: 8