缓存与 KV 存储Cache Breakdown
缓存击穿 是什么?
单个热点 key 过期的瞬间,大量请求同时回源
类比:超市最火的商品刚卖完,所有人一起冲进仓库
典型场景
首页 banner 的 key 过期,瞬时几万个请求同时发现缓存没了,全部去查数据库,数据库瞬间被打满。
两种解法
一个是让只有一个请求去查,一个是干脆不设过期。
- 互斥锁:第一个请求 SETNX 抢锁去查库,其余请求等待或返回旧值
- 逻辑过期:value 里存过期时间,物理上永不过期;发现逻辑过期时异步刷新,先返回旧数据
- 热点数据预热 + 定时刷新,从根本上避免失效瞬间
取舍
互斥锁实现简单,但等待的请求会变慢;逻辑过期响应快,但会短时间返回旧数据。对一致性要求不高的商品详情,逻辑过期体验更好。