一致性hash
对于redis的主从分布,从服务器负责数据的读取,当你一个数据进来的时候,会计算hash值,然后根据服务器的数量取模确定在哪个从服务器中。
这样就导致了一个问题,因为你服务器的数量是会改变的,甚至这个改变的频率还会比较频繁,例如添加服务器或者服务器挂了,因此你取模的那个底数就变了,也就是你数据的存储位置都要发生改变。
这个时候就出现了一致性hash,它首先有个2的32次方长的一个hash环,会根据各个服务器的特征信息,例如ip或者其他信息计算hash,算出它在环上的一个位置。然后你的key也计算hash,算出它在环上的位置。通过查看该位置前面是哪个服务器,就能确定它要存到哪。这样的好处是就算某个服务器挂掉了,它需要转移的数据就是该服务器上的数据,而不用所有的服务器都发生转变。
为了避免两个服务器的hash节点离的太近导致数据分布不均匀,可以多次计算服务器的hash值生成多个节点,使节点分布相对均匀。

浙公网安备 33010602011771号