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

s3fp2yjn  于 5个月前  发布在  Redis
关注(0)|答案(2)|浏览(62)

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

9q78igpj

9q78igpj1#

answer from antirez, the author of Redis, below.
原因是:

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

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

yebdmbv4

yebdmbv42#

这些“插槽”仅仅是分片之间的一个分配单元。你不会在集群中拥有16 K的分片服务器;但它们足够细粒度,允许某种程度的加权负载分布。(例如,如果您在一种类型的硬件上开始使用四个分片,并选择引入两个更多功率配置文件,您可以使新服务器的目标插槽数是现有服务器的两倍,从而实现容量的相对均匀利用。
我只是概括了它们的使用要点,详情请阅读Redis Cluster Specification

相关问题