Go + Redis 热点 Key 治理:从识别到分片
现象 某个 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 的本质是负载不均。先把流量摊平,再谈更复杂的缓存一致性优化。