缓存击穿本身不会直接导致内存溢出,它主要压垮数据库;但若兜底逻辑缺陷(如空值缓存未设TTL、fallback反复写入无效key),则可能引发Redis内存泄漏甚至OOM。
缓存击穿是热点 key 过期后并发请求穿透到 DB,它主要压垮的是下游数据库,不是 Redis 内存。但如果你的应对逻辑有缺陷——比如用空值或默认对象填充缓存、又没设 TTL,或者 fallback 逻辑反复写入无效 key——那确实会把击穿演变成内存泄漏甚至 OOM。
重点排查那些本不该长期存在的 key:空结果缓存、占位符、错误响应体等。这类 key 往往特征明显——数量多、生命周期长、value 很小但总量惊人。
redis-cli --bigkeys 看有没有大量 string 类型的小 key(比如几十字节但上百万个)redis-cli ttl "cache:order:123456",如果返回 -1(永不过期)或远超业务合理范围(如 7 天以上),就是风险信号redis-cli keys "cache:*:fallback*" 或 redis-cli keys "*empty*",确认是否批量生成即使你配置了 allkeys-lru,如果这些兜底 key 是刚写入就立刻被访问(比如每次击穿都查一次 fallback),它们会被频繁 touch,实际很难被淘汰。更糟的是,如果用了 noeviction 或 volatile-* 且没设过期时间,它们就彻底“钉”在内存里了。
redis-cli config get maxmemory-policy,确认不是 noeviction
redis-cli expire "cache:user:9999:empty" 300(5 分钟足够缓冲)SET key value 而不用 SETEX 或 EXPIRE —— 这是最常见的漏设 TTL 场景单纯看 used_memory 上涨不说明问题,要结合时间点对齐日志。真正的线索藏在突增的 key 数量和低效的淘汰率里。
CacheMissException),和 Redis 的 INFO memory 输出做时间对齐evicted_keys 指标是否同步上升:如果击穿期间 evicted_keys 几乎为 0,说明淘汰策略失效或 key 根本没被选中redis-cli --stat 持续观察,击穿高峰若伴随 keyspace_hits 骤降 + keyspace_misses 暴涨 + used_memory 缓慢爬升,大概率是兜底 key 在堆积真正危险的从来不是击穿那一刻,而是后续几分钟里,几十万条 "cache:xxx:empty" 被无 TTL 地塞进 Redis —— 它们不占多少单个内存,但合起来能吃掉几 GB。别只盯着热点 key 本身,盯住你写的那行 cache.set(key, emptyObj)。
Tplink企业版路由器WiFi名称的默认设置介绍(Tplink企业版路由器WiFi名称的默认设置是什么)
Tplink路由器灯常亮无法上网的原因分析(如何解决Tplink路由器灯常亮无法上网的问题)
Tplink千兆企业级路由器自动重启的作用和优势介绍(如何设置Tplink千兆企业级路由器自动重启功能)
一根天线的tplink路由器有哪些(一根天线的Tplink路由器的特点和优势介绍)
tplink路由器外网访问不了nas(Tplink路由器外网访问NAS的原因分析)
Tplink无法搜到路由器的原因分析(如何解决Tplink无法搜到路由器的问题)