什么是reids缓存雪崩、穿透、击穿

本文讨论了Redis缓存中的三个常见问题:雪崩、缓存穿透和缓存击穿,提供了设置失效时间、使用集群分布、布隆过滤器和分布式锁等解决方案来减轻数据库压力并保证服务稳定性。
摘要由CSDN通过智能技术生成

1.Reids缓存雪崩

Redis缓存key同一时间大量失效,导致大量请求全部打到数据库,造成数据库挂掉

解决方案

设置缓存失效时间,随机初始化失效时间

部署集群的时候,把热点数据平均分布到不同redis节点上去

暴力方法,不设置失效时间,永远不失效

利用定时任务刷新缓存时间,在失效之前重新刷新失效时间

2.缓存穿透

数据库的主键是从0开始递增,没有负值。恶意用户利用这一点,不断用id小于0的参数给服务器发请求,redis就查不到这个缓存,redis中没有就会去数据库中找,找不到返回空值。恶意用户一直用id小于0的参数发送,就会一直直接穿透缓存,打在数据库上,导致数据库挂掉,

解决方案:

数据不论得到什么请求,是空值还是有值都缓存到redis中去,但是对方可能换参数,IP拉黑,但是可能换IP

判断参数的合法性,不合法return掉

布隆过滤器

3.缓存击穿

比如某秒杀商品放到reis缓存中,对应了一个key,只设置了很短的缓存失效时间,大量用户访问这个商品的时候都会到redis中访问该key,redis查询该缓存key并返回回去,突然这个缓存时间失效了,就把大量访问该key的数据打到数据库中,一般情况下,都是访问热点key,被击穿,打到数据库上,数据库挂掉

解决方案

缓存时间,不过期

分布式锁,互斥锁:给缓存找不到,请求数据库这一步上锁,那么这时候就只有一个线程能够抢到这个锁,也就是说只有一个线程到数据库找数据,数据库压力就小了,查到数据后,再把数据重新写到缓存中去,没抢到锁的向等待几秒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值