redis-击穿、穿透、雪崩

redis-击穿、穿透、雪崩,第1张

参考自:https://download.csdn.net/learn/29675/424594?spm=1002.2001.3001.4143

​​​​​

某一个key在redis中不存在,透过redis去数据库中查,反复的查(不一定是高并发);

在常用的使用场景中,如果redis查询失败则会直接查询数据库并把查询到的数据放到redis中,在此场景中,如果有人恶意的使用不存在的key进行查询,不存在则直接查询数据库,如果大量查询不存在的key则直接会直接穿过redis直接查询数据库,大量请求数据库的情况下会对数据库造成很大的压力;

        解决方案:在查询一个redis不存在的key时,直接查询数据库,如果数据库也不存在则在Redis中给这个key值设置一个null值,并设置一个很短的过期时间,这样在请求一个redis不存在值时就会暂时使用null值返回(如果redis中不存在,查询数据库时使用同步方法,不然并发的情况下还是会有很多个情况到达数据库查询),既然是恶意访问,那就有可能使用随机生成key进行访问,所以要给赋值一个null值,并设置一个很短的过期时间,比如1秒,或者5秒,这样即便是一些垃圾数据也会很快过期被清理掉;

 某一时间点,redis大量数据过期,大量请求同时透过redis到达数据库

redis大批量的数据在同一个时间点过期,导致在这一个时间点上会有大批量的请求透过redis到达数据库,对数据库造成压力;如果数据量承受不住压力挂掉那就是很严重的后果;如果数据库不挂还好只是在这个时间点压力很大,在这个时候如果还是对数据进行相同时间的过期时间,则到过期时间还是会在某一个时间点造成这种显现,数据量会间歇性的造成压力;

        解决方案:

        上图方式1推荐;

        方式2,使用消息队列是将请求消息放到消息队列中,按照规定的规则顺序执行,延迟响应,客户体检不是很好;

 高并发请求,如果redis数据过期的那个时间点,高并发请求数据库中数据

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/721913.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存