Go + Redis Pipeline:吞吐提升与延迟权衡

背景 这类问题在真实项目里很常见:高并发、复杂依赖、发布频繁、团队协作面广。只有把边界条件提前定义清楚,系统才会在压力下保持稳定。 实践要点 先定义目标:可用性、延迟、成本哪个优先。 把关键路径显式化:超时、重试、降级、回滚。 把策略写进代码和流程,而不是只停留在文档。 代码片段 ctx, cancel := context.WithTimeout(ctx, 200*time.Millisecond) defer cancel() err := client.Call(ctx) if err != nil { return err } 总结 工程实践最怕“看起来正确”。把策略做成可观测、可验证、可回滚的闭环,才能在生产环境里真正稳定运行。 稳定性不是某个技巧,而是持续的系统化约束。

2026年5月20日 · 1 分钟 · BvBeJ

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 的本质是负载不均。先把流量摊平,再谈更复杂的缓存一致性优化。

2026年5月8日 · 1 分钟 · BvBeJ