现象
- 某个 key QPS 极高,单分片 CPU 打满。
- 网络带宽与复制延迟在高峰突增。
- 迁移 slot 时业务抖动明显。
治理步骤
- 识别热点:按 key 维度打 sampling 访问日志。
- 评估可分片性:是否支持合并读、是否有排序依赖。
- 设计散列方案:
hotkey:{uid}:N。
Go 读写示例
func shardKey(base string, uid int64, shards int) string {
return fmt.Sprintf("%s:%d", base, uid%int64(shards))
}
- 写:按 shard 分散。
- 读:并发读取后聚合,必要时加本地短缓存。
额外策略
- 热点结果做二级缓存(进程内 + Redis)。
- 高峰期提前预热,避免瞬时击穿。
- 为热点接口配置独立限流与熔断。
小结
热点 key 的本质是负载不均。先把流量摊平,再谈更复杂的缓存一致性优化。