redis-穿透、雪崩、击穿

缓存穿透:去查询一个数据库和缓存中一定没有的数据.

现象:如果我要查一条id=0或者id=-1的数据,因为缓存中肯定查不到,就会发送sql去访问数据库.同时发送十万条访问,数据库就承受不了这么大的压力就会挂掉.重启数据库,访问一直发送,服务器就会启动不起来.
解决办法:

1.代码判断.

if(id=0 ||id =-1){
//就把传过来的参数当做redis的key,把null或者""当做value,并且设置失效时间,防止以后有数据的时候 也查不出来
}else{
//正常缓存的流程:先去缓存中查数据,缓存中没有数据,就去访问数据库,在数据库查到了之后把数据保存到redis中.
}

2.布隆过滤器.

缓存雪崩:某一个时间段,redis中数据集体全部过期失效.

现象:比如在22点的时候,redis中的数据全部失效了,同时来了十万条访问,因为redis中没有数据了,就会直接访问数据库,因为是同时访问数据库,所以来不及把数据存入redis中,就把所有压力给了数据库.

解决办法:1.在批量往redis中存数据的时候,在设置失效时间的时候在后边加个随机值,保证这些数据不会同时失效.
2.热门的数据可以设置失效时间长一些,冷门的数据设置的失效时间短一些.特别热门的数据可以设置失效时间永不过期.

缓存击穿:在扛着高并发进行对某一个非常热门的key访问的时候,当这个key失效的瞬间,持续的大并发会穿透redis,直接访问数据库.

现象:比如在手机抢购的时候,有上千万的用户在访问,当这个key失效的时候,同时还是有上千万的用户在访问这个数据,此时redis中已经没有这个数据了,所有的访问就会直接去数据库,数据库就会承受不了这么大的压力,会挂掉.就像在Redis中凿出了一个洞一样.

解决办法:把非常热门key的数据的失效时间设置成永不失效.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值