Redis缓存雪崩、缓存穿透、缓存击穿
缓存雪崩
Redis中的缓存数据是有过期时间的,当在同一时间大量的缓存同时失效时就会造成缓存雪崩。
解决方案
1、设置Redis中的key永不过期,缺点是会占用很多内存
2、使用Redis的分布式锁SETNX。由于查询的是同一个key,那让同一时间只有一个请求落到MySQL上,其余的都去查缓存的数据。
缓存穿透
在Redis缓存和数据库中都找不到相关的数据。如果有大量非法请求,如id为负数的请求,导致每次这个请求都要去缓存与数据库查,造成数据库被压垮。
解决方案
1、过滤非法查询,如id小于0或分页内容过大等
2、缓存空数据。如果查询是合法的,但缓存与数据库中都没有,那就在Redis中缓存一个空对象,但问题在于,如果客户端一直发送这种恶意请求,就会一直在缓存中建立空对象,浪费很多空间。
3、使用布隆过滤器。虽然布隆过滤器会存在误判,但可以设置一个可以接受的误差值。
缓存击穿
缓存击穿和缓存雪崩类似,也是因为Redis中key过期导致的。只不过缓存击穿是某一个热点的key过期导致的。比如在秒杀场景中,如果一个秒杀商品的key突然过期,那此时的超高并发量就直接打到了数据库上,造成数据库被压垮。
解决方案
1、设置热点key永不过期
2、使用Redis的分布式锁,与缓存雪崩很像,区别在于缓存雪崩是某一时刻大批key失效,而缓存击穿是一直有大量的请求访问热点key,就像是许多子弹打到盾牌的同一个点上,最终击穿了这面盾牌。那我就加上限制,让同一时间只能有一个请求落到数据库上,因为查询的都是同样的信息。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)