redis一致性hash算法理解

一般算法:

  對(duì)對(duì)象先hash然后對(duì)redis數(shù)量取模,如果結(jié)果是0就存在0的節(jié)點(diǎn)上。

  ? ?假設(shè)有0-3四個(gè)redis節(jié)點(diǎn)、20個(gè)數(shù)據(jù):

進(jìn)行取模后分布如下:

現(xiàn)在因?yàn)閴毫^(guò)大需要擴(kuò)容,增加一臺(tái)redis4、第五個(gè)節(jié)點(diǎn):

現(xiàn)在只有4個(gè)節(jié)點(diǎn)還能夠命中。命中率是:4/20 = 20%,命中率極其低下。(redis肯定是不會(huì)這樣用的)

二、redis使用的consistent hashing(一致性hash算法)

  1、環(huán)形hash空間:

把對(duì)象映射到0-2的32次冪減1的空間里。

現(xiàn)在假設(shè)有4個(gè)對(duì)象:object1-object4,將四個(gè)對(duì)象hash后映射到環(huán)形空間中:

接下來(lái)把chche映射到hash空間(基本思想就是講對(duì)象和cache都映射到同一hash數(shù)值空間中,并且使用相同的hash算法,可以使用cache的ip地址或者其他因子),假設(shè)現(xiàn)在有三個(gè)cache:

每個(gè)key順時(shí)針往下走,找到的第一個(gè)cache節(jié)點(diǎn)就是存儲(chǔ)位置:

現(xiàn)在移除一個(gè)cacheB節(jié)點(diǎn)、這時(shí)候key4將找不到cache,key4繼續(xù)使用一致性hash算法運(yùn)算后算出最新的cacheC,以后存儲(chǔ)與讀取都將在cacheC上:

移除節(jié)點(diǎn)后的影響范圍在該節(jié)點(diǎn)逆時(shí)針計(jì)算到遇到的第一個(gè)cache節(jié)點(diǎn)之間的數(shù)據(jù)節(jié)點(diǎn)。

現(xiàn)在看一下增加一個(gè)節(jié)點(diǎn):

影響范圍為:添加節(jié)點(diǎn)逆時(shí)針遇到的第一個(gè)cache節(jié)點(diǎn)之間的數(shù)據(jù)節(jié)點(diǎn)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容