Cache-Aside(旁路缓存)

读:先查缓存,命中则返回;未命中则查数据库,并将结果写入缓存。写:先更新数据库,再删除缓存(而非更新,防止并发脏数据)。

三大经典问题

1. 缓存穿透

大量查询不存在的 key,直接打到数据库。解决:布隆过滤器(BloomFilter)前置过滤 + 对空结果缓存短 TTL。

2. 缓存击穿

热点 key 过期瞬间大量并发请求同时穿透。解决:互斥锁(SETNX)或逻辑过期(异步更新)。

3. 缓存雪崩

大量 key 同时过期或 Redis 宕机。解决:随机 TTL 分散过期时间 + Redis 集群高可用 + 限流降级。