热点 Key 自动发现与本地缓存:Redis 热键打爆?Caffeine 二级缓存+过期抖动防雪崩!
大促的时候,运营在首页挂了一个爆款商品。瞬间几十万用户涌进来,同一个商品详情接口被疯狂调用。Redis 里这个商品的缓存 Key 被打到单节点 QPS 上限,响应时间从 1ms 飙升到 50ms,Redis 线程池打满,带着其他 Key 的请求也一起慢了。一块热铁掉进水里,整锅水都烫了。 这就是典型的热点 Key 问题。一个 Key 太热,把 Redis 单节点打穿了。因为 Redis 是单线程处理命令的,一个慢不会拖累别的,但如果请求量超过这个单节点的处理能力上限,所有请求都得排队。 今天聊聊怎么用 Caffeine 本地缓存做二级缓存,配合过期时间抖动防止缓存雪崩。 热点 Key 为什么难搞 先搞清楚热点 Key 的问题本质。正常缓存访问是这样的: 请求 → Redis → 命中 → 返回(1ms) 热点 Key 的情况下: 1000 个并发请求 → Redis 同一个 Key │ └─ 1000 次网络 IO(即使是 Redis,单节点也有处理上限) 问题不在"数据能不能被缓存",而在"所有请求都打到了同一个 Redis 节点上"。如果你的 Redis 是集群模式,这个热点....