Why didn't anybody tell me about Redis hash slots?
2 days ago
- 该服务将快递员与配送进行匹配,并依赖路由引擎估算距离,这是延迟的主要来源。
- 缓存至关重要,因为路线估算具有重复性,但原始坐标缓存会失效;为此使用H3六边形进行去重。
- Redis集群使用16384个哈希槽;像MSET/MGET这样的多键命令仅当所有键位于同一槽位时才有效,从而导致性能问题。
- 解决方案是使用哈希标签(花括号)强制将键分配到同一槽位,通过暴力搜索找到合适的标签。
- 进一步的优化包括:在扇出前对键进行排序以避免节点过载,使用EVAL脚本配合MSET实现过期设置,以及将JSON切换为CSV以节省CPU资源。
- 作者首先学会了构建基准测试工具,遵循Rob Pike关于测量和避免过早优化的规则。