这种情况的发生是由于Cluster集群采用分片设计理念,每个具体的Key只能分布到某一个特定的分片节点上。Key的分布过程包含以下两个步骤:
CRC16算法计算槽位(Slot):
- 针对Key值进行CRC16算法计算,然后对16384取模,得到对应的槽位(Slot)值。
映射到具体分片:
- 根据槽位(Slot)和分片的映射关系,找到Key应该属于的具体分片,然后进行存取操作。
因此,Key并不是均匀分布在实例的各个分片上,而是根据计算结果进行存取的。当存在大Key和热Key时,可能会导致某个分片的容量或性能过载,而其他分片的内存负载仍然很低,未达到容量和性能的瓶颈。这是Cluster集群中分片设计的特性,需要针对具体的分片进行优化或调整,以解决性能瓶颈问题。