Cache-Aside(旁路缓存)
读:先查缓存,命中则返回;未命中则查数据库,并将结果写入缓存。写:先更新数据库,再删除缓存(而非更新,防止并发脏数据)。
三大经典问题
1. 缓存穿透
大量查询不存在的 key,直接打到数据库。解决:布隆过滤器(BloomFilter)前置过滤 + 对空结果缓存短 TTL。
2. 缓存击穿
热点 key 过期瞬间大量并发请求同时穿透。解决:互斥锁(SETNX)或逻辑过期(异步更新)。
3. 缓存雪崩
大量 key 同时过期或 Redis 宕机。解决:随机 TTL 分散过期时间 + Redis 集群高可用 + 限流降级。