基本思想:
(1)一共有16384個(gè)槽慨畸,每臺(tái)服務(wù)器分管其中的一部分
(2)插入一個(gè)數(shù)據(jù)的時(shí)候炒俱,先根據(jù)CRC16算法計(jì)算key對(duì)應(yīng)的值奶稠,然后用該值對(duì)16384取余數(shù)(即)陨献,確定將數(shù)據(jù)放到哪個(gè)槽里面
(3)在增加節(jié)點(diǎn)的時(shí)候盒犹,之前的節(jié)點(diǎn)各自分出一些槽給新節(jié)點(diǎn),對(duì)應(yīng)的數(shù)據(jù)也一起遷出
(4)客戶端可以向任何一個(gè)Redis節(jié)點(diǎn)發(fā)送請(qǐng)求眨业,然后由節(jié)點(diǎn)將請(qǐng)求重定向到正確的節(jié)點(diǎn)上
為什么要選擇的槽是16384個(gè)呢急膀?
crc16會(huì)輸出16bit的結(jié)果,可以看作是一個(gè)分布在0-2^16-1之間的數(shù)龄捡,redis的作者測(cè)試發(fā)現(xiàn)這個(gè)數(shù)對(duì)求模的會(huì)將key在之間分布得很均勻卓嫂,因此選了這個(gè)值。
參考資料:
[1]https://www.cnblogs.com/abc-begin/p/8203613.html
[2]哈希算法:https://blog.csdn.net/tanggao1314/article/details/51457585