缓存被穿透了怎么办?
💡
原文中文,约2200字,阅读约需6分钟。
📝
内容提要
本文介绍了缓存穿透、缓存雪崩和缓存击穿三种情况的原因和解决方案,包括对空值进行缓存、使用布隆过滤器或接口校验等方式解决缓存穿透,将失效时间分散开、使用多级架构、设置缓存标记或使用锁或队列等方式解决缓存雪崩,提前对热点数据进行设置、监控数据并适时调整、使用锁机制等方式解决缓存击穿。同时,文章也提到了注意事项,如使用空值作为缓存时需要注意key的过期时间不能太长等。
🎯
关键要点
-
缓存穿透:大量请求根本不存在的key。
-
缓存雪崩:redis中大量key集体过期。
-
缓存击穿:redis中一个热点key过期,导致大量用户访问。
-
穿透解决方案:对空值进行缓存、设置白名单、使用布隆过滤器。
-
雪崩解决方案:分散失效时间、使用多级架构、设置缓存标记、使用锁或队列。
-
击穿解决方案:提前设置热点数据、监控数据并调整、使用锁机制。
-
三者出现的根本原因在于Redis命中率下降,请求直接打在DB上。
-
使用空值作为缓存时,key的过期时间不能太长,防止占用redis资源。
-
布隆过滤器可能存在哈希冲突的风险。
-
缓存雪崩的解决方案包括随机化key的过期时间和使用多级缓存架构。
-
缓存击穿的解决方案包括提前设置热点数据和使用锁机制。
➡️