为什么redis集群只有16384个插槽?

时间:2016-03-24 15:10:03

标签: redis

在我看来,随着密钥的发展,“哈希冲突”将越来越频繁地发生。我不知道同一个插槽上的那些键是否存储在单链表中,那么读取性能是否会受到影响,特别是陈旧的记录?

2 个答案:

答案 0 :(得分:1)

这些“插槽”仅仅是跨分片的分布单位。您不会在群集中拥有16K分片服务器;但是它的粒度足以允许某种程度的加权负荷分布。 (例如,如果您在一种类型的硬件上开始使用四个分片,并选择引入另外两个更强大的功能配置文件,则可以使新服务器的目标是现有服务器的两倍,从而实现更均匀的利用率你的能力。

我只是总结了他们如何使用的要点。有关详细信息,请阅读Redis Cluster Specification

答案 1 :(得分:1)

answer from antirez, the author of Redis, below.

原因是:

  • 正常心跳包携带节点的完整配置,可以用幂等方式替换旧节点以更新旧配置。这意味着它们包含原始形式的节点的插槽配置,它使用2k空间和16k插槽,但使用65k插槽将占用8k空间。
  • 与此同时,由于其他设计权衡,Redis Cluster不太可能扩展到超过1000个主节点。

所以16k在正确的范围内确保每个主站有足够的插槽,最多1000个主,但是足够小的数字可以轻松地将插槽配置传播为原始位图。请注意,在小型集群中,位图难以压缩,因为当N很小时,位图将设置插槽/ N位,这是设置的大部分位。