Redis Hash Slots:我踩过的性能坑

Why didn't anybody tell me about Redis hash slots?

我在一家共享经济配送应用负责调度服务,核心挑战是快速计算骑手与订单的距离。起初,我使用 H3 将坐标哈希化并缓存到 Redis,却忽略了 Redis Cluster 的 Hash Slots 机制。由于键名差异导致请求无法批量处理,原本的一次 MGET 被拆解成数十次独立网络往返,严重拖慢了系统。后来,我利用 Redis 的 Hash Tag 特性,通过大括号强制将相关键分配到同一槽位,成功将多次请求合并。此外,我还通过本地预排序键、使用 EVAL 脚本处理过期时间以及将 JSON 值改为 CSV 格式,进一步优化了性能。这段经历让我深刻体会到,在 n 值很大的场景下,简单的算法往往行不通,必须依赖更复杂的优化策略和充分的基准测试。

我测量过与路由服务的交互是我们最大的瓶颈,因此认为用简单算法对接 Redis 就能解决问题,却忽略了在我们的场景下 n 值始终很大,需要比预期更复杂的算法才能完成任务。

同日更多故事

2026-09-26