余數(shù)hash算法:
原理:通過(guò) hashCode%節(jié)點(diǎn)數(shù) 來(lái)實(shí)現(xiàn)。
假設(shè)key1對(duì)應(yīng)的hash值為10,節(jié)點(diǎn)數(shù)量為3,取余數(shù)得1谷遂,那么key1對(duì)應(yīng)的節(jié)點(diǎn)為node1。
由于hashcode的隨機(jī)性比較強(qiáng)卖鲤,所以肾扰,所有的key可以很均勻的分布到所有的節(jié)點(diǎn)上。
但是蛋逾,在分布式環(huán)境下集晚,這個(gè)hash算法存在很大的問(wèn)題:
假設(shè)節(jié)點(diǎn)數(shù)量從3變成了4,由于key1的hash值不變换怖,取余數(shù)的結(jié)果變成了2甩恼,那么key1對(duì)應(yīng)的節(jié)點(diǎn)變成了node2。
這就導(dǎo)致了沉颂,當(dāng)節(jié)點(diǎn)數(shù)量發(fā)生變化条摸,大多數(shù)的數(shù)據(jù)指向的節(jié)點(diǎn)會(huì)發(fā)生變化。