【发布时间】:2021-07-12 02:06:20
【问题描述】:
根据 Redis 集群specification,一个 Redis 集群有 16384 个插槽。我想知道是否有人成功尝试配置 Redis 集群以使用不同数量的插槽。
我的问题是:我有一个由集群模式 Redis 集群支持的应用程序。应用程序向 Redis 发送许多多获取操作(使用 MGET 命令)。在集群模式下,MGET 只支持属于同一个 slot 的 key,所以传入 multi-get 操作的 key 需要按 slot 分组,每个涉及的 slot 下发一个 MGET 命令。
MGET 中涉及的键数总是远少于 16384 个,最坏的情况是 ~2000 个键,这意味着大多数多获取操作最终会产生数百个 MGET 命令,每个命令只有一个键。
对于同一节点上的插槽,我可以通过管道传输多个 MGET 以提高性能。但是我一直想知道是否可以通过配置一个低得多的插槽号来完全避免这个问题。
例如,如果 slot 的数量是 128,使用包含 1024 个 key 的 multi-get 操作(假设这些 key 完全均匀地分布在 128 个 slot 上),最终将得到 128 个 MGET 命令,每个命令有 8 个 key。
如果我按节点对它们进行分组并将它们流水线化,我认为性能会比使用 16384 个槽更好(1024 个完全均匀分布的键将导致 1024 个 MGET 命令,每个都具有单个键)
【问题讨论】:
-
Redis(包括集群模式)是开源的github.com/redis/redis。您可以直接提取代码并制作自己的版本。
标签: redis redis-cluster