- 基础实现
将节点A,B,C利用类似MD5的hash算法得到一个hash值,并将它们排序按照顺时针方式组成一个环;例如node A =208 ,node B = 230,node c = 286;当object对象存入缓存时,将自身根据同样的hash算法得到一个key值,例如object A = 322,则此数据将缓存到node A, object B = 235,则缓存到node C ,以此判定; 此种方式在添加,删除节点时,只会影响相近的两个节点数据;但是此种方式在节点服务器偏少的时候,会出现缓存不均衡的情况,造成node A,node B,node C分配缓存不均衡,因此诞生了另外一种虚拟节点的hash实现。
(2)虚拟节点的实现
当节点只存在A,B,C三个节点时,物理机偏少,因此在创建服务时,每个物理机创建4个虚拟节点,因此虚拟节点存在12个,虚拟节点的key生成一般是基于节点IP地址加数字后缀的方式,例如Hash(“192.168.1.99#1”);
Hash(“192.168.1.99#2”);
Hash(“192.168.1.100#1”);
Hash(“192.168.1.100#2”);
以及方法来生成虚拟节点key,并使用类似map的方式来记录实际物理机和虚拟机的key映射关系。