Redis的穿透,击穿,雪崩的场景以及解决方案?大白话描述!

穿透:查询Redis没有,去查数据库,也没有

常见发生:用户使用postman恶意访问数据库中没有的数据(如-1,超大数)

解决方案:缓存空对象,做判断,布隆过滤器

缓存空对象具体实现:不管有没有,从数据库查出来后都存入Redis,那样除了第一次会查数据库,其他时候都是查空的Redis,记得设置过期。

做判断具体实现:在应用程序中做一个负数,超大数检测过滤。

击穿:查询Redis没有,去查数据库,数据库有

常见发生:某个key持续抗压高并发,过期瞬间多个请求击穿Redis去查询数据库,导致多次存入Redis

解决方案:双重检查锁,永不过期

双重检查锁具体实现:当同时有多个客户端去请求Redis中的数据时,第一个到达的客户端去获得该数据,这时发生击穿,没获取到。那就会去获取lock_key,如果不存在就将lock_key设置为自己的标识,例如client_A。其他客户端到来时也查不到数据,也去获取lock_key,却发现lock_key存在且标识和自己不一样。而client_A发现和自己的一样,那么它就会去拿数据库的数据放进Redis。第一次检查就是去查看lock_key是否存在(不存在就设自己的,存在走开),第二次是验证lock_key和自己是否一致。

永不过期具体实现:字面意思永不过期,但是需要自己选择,一般是将你能预测的热点资源做永不过期,或者设置一个当访问量到达一定数量做永不过期。

雪崩:多个数据一下都过期,相当于多重击穿或者穿透

常见发生:redis中多个数据同时过期,redis嘎了

解决方案:随机过期,做哨兵

随机过期具体实现:给Redis里面设计的key-value加上过期时间,过期时间内加入Duration时间跨度对象,设置随机时间,随机时间自己看着来。

做哨兵具体实现:Redis Sentinel(Redis 哨兵)是一个高可用性解决方案。概括来说就是,设置一个哨兵进程去监控主从Redis的状态,主的嘎了就升级从的顶上去。具体想了解Redis读写主从体系,自己去看看吧!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值