余數(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ā)生變化。