缓存三剑客(穿透,雪崩,击穿)理解

缓存穿透

概念理解

缓存穿透正如其名穿透,说明访问的数据在缓存和数据库里都没用,而且此时还大量的发起了访问,导致数据库崩溃

解决方法

一、第一种解决方法就是保存空值在数据库里面,但是这种情况会很消耗空间

二、第二种办法就是使用布隆过滤器,当有数据来访问的时候,布隆过滤器检查一下如果缓存里没有,直接返回回去,此时布隆过滤器也有一定的弊处,假如我此时访问的数据是刚刚好过了我redis的过期时间,但是此时mysql里面还有数据,那不就可惜了吗?所以有一种方式叫缓存预热(缓存预热就是相当于我设置的数据过期时间是个假时间,什么意思呢?就是相当于我过期时间到了但是我不会将此时在缓存里的数据删除,而是将这个旧数据一直存储在缓存当中,当有数据访问这个缓存的时候,我先返回旧数据,再向数据库发请求获取新数据来更新,但是如果用了缓存预热这种技术的话就不能再使用惰性删除了)

缓存雪崩

概念理解

缓存雪崩,这个也如其名雪崩,为什么会雪崩呢?首先最先能想到的就是redis宕机了,缓存不管用了,大量数据打到了数据库上,还有什么原因呢?还有就是大量缓存失效了,同样会造成大量数据打到数据库上,造成数据库崩溃。那么应该如何解决呢?

解决方法

一、首先便是给每个缓存设置过期时间,避免大量缓存同时失效的情况

二、还能用分布式锁来做一个限制,当缓存失效之后,只允许一个请求进数据库来获取,其他的请求等待,这样的话不好的也就是会造成等待时间很长

缓存击穿

概念理解

对于缓存击穿而言,那就很简单了,他是击穿而不是穿透,说明了什么说明了他在数据库里有,也就说明此时是一个高频请求,怎么会造成这种影响呢?首先最应该想到的就是一个高频请求的缓存key失效了,导致所有的请求都打在数据库上

解决方法

一、此时能怎么解决呢?首先就是获取一个互斥锁,如果获取成功则直接从数据库中获取数据并更新缓存,避免其他请求同时访问数据库

二、其次就是设置热点key的ttl永不过期,或者使用缓存预热也可以。

相关推荐
深念Y12 小时前
SSD 寿命洁癖:编译过程不入盘的原则与实践
缓存·io·内存·编译·ssd·读取·写入
智购科技无人售货机厂家12 小时前
2026自动售货机实时库存管理系统:从Redis缓存到持久化的数据架构演进~YH
redis·缓存·架构
晓晓_za89866812 小时前
Geo 优化源码蒸馏词机制:地域词库构建与匹配逻辑详解
运维·tcp/ip·spring·缓存·ci/cd
nvd1112 小时前
LiteLLM 如何使用 Redis:从部署位置到精确响应缓存
redis·缓存·gateway
quantdash_cc1 天前
历史数据断层与REST请求慢到崩溃?QuantDash高性能量化数据API终极解决方案
开发语言·python·缓存·php·量化·quantdash
一次旅行1 天前
2026‑08‑22 AI产业深度解读|Anthropic自研芯片布局、SGLang权重缓存守护进程、Agent任务作弊审计、AI原生SDLC
人工智能·缓存·sglang
晚安code1 天前
Redis 内存淘汰策略实战:什么时候淘汰、怎么选、怎么防缓存击穿
java·redis·缓存
CDN3601 天前
CDN 缓存策略优化实操:出海业务提升缓存命中率,TTL、缓存 Key、刷新配置与踩坑总结
缓存·cdn加速·cdn防护·360cdn
mit6.8242 天前
保持缓存的有效性
缓存
AI多Agent协作实战派2 天前
AI多Agent协作系统实战(四十六):改了十次规则,AI员工还是老样子——会话缓存的坑
java·spring·缓存