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

大部分开发过程中都会用到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的访问量

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值