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

发布时间:2024年01月12日

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,被击穿,打到数据库上,数据库挂掉

解决方案

缓存时间,不过期

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

文章来源:https://blog.csdn.net/2301_81851878/article/details/135560457
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。