type
status
date
slug
summary
tags
category
icon
password

缓存雪崩(Cache Avalanche)

大量缓存 key 在同一时间集中过期,导致所有请求直接打到数据库,DB 瞬间压力暴增甚至宕机。
典型场景: 系统启动时批量写入缓存,TTL 都设成同一个值,到期后同时失效。
解决方案:
  • TTL 加随机值——最简单有效,避免集中过期:
  • 多级缓存——本地缓存(Caffeine / Guava Cache)+ Redis,即使 Redis 层全部失效,本地缓存还能扛一波
  • 熔断降级——用 Sentinel 或 Hystrix,DB 压力过大时直接返回兜底数据或限流

缓存击穿(Cache Breakdown)

某个热点 key 过期的瞬间,大量并发请求同时穿透到数据库。和雪崩的区别是:雪崩是"面"(大批量 key),击穿是"点"(单个热点 key)。
典型场景: 某个爆款商品的缓存刚好过期,瞬间几万 QPS 直接查 DB。
解决方案:
  • 互斥锁(Mutex Lock)——只让一个线程去重建缓存,其余等待:
  • 逻辑过期(Logical Expiration)——缓存永不真正过期,value 里存一个逻辑过期时间,发现过期后异步更新,当前请求先返回旧数据:

缓存穿透(Cache Penetration)

查询一个根本不存在的数据,缓存和 DB 都没有,每次都穿透到 DB。常见于恶意攻击。
解决方案是布隆过滤器(Bloom Filter) 前置拦截,或者缓存空值set key null, ttl=60s)。

一句话总结区分:
本质
关键词
雪崩
大量 key 同时过期
"面",批量失效
击穿
单个热点 key 过期
"点",热点并发
穿透
查不存在的数据
"空",数据不存在