redis 數(shù)據(jù)分區(qū)--一致性hash&&虛擬槽分區(qū)

1.節(jié)點(diǎn)區(qū)域分區(qū):
使用特定的數(shù)據(jù),如redis的鍵或用戶ID,再根據(jù)節(jié)點(diǎn)數(shù)量N使用公式:hash(key)%N計(jì)算出hash值,用來決定數(shù)據(jù)映射到哪一個(gè)節(jié)點(diǎn)上.

這種方案的問題是:
當(dāng)節(jié)點(diǎn)數(shù)量變化時(shí),需要重新計(jì)算hash,會(huì)導(dǎo)致數(shù)據(jù)的重新遷移.

2.一致性hash算法
一致性hash算法實(shí)現(xiàn)思路是為系統(tǒng)中每一個(gè)節(jié)點(diǎn)分配一個(gè)token,范圍在0~2^32,這些token構(gòu)成一個(gè)hash環(huán).數(shù)據(jù)的讀寫執(zhí)行節(jié)點(diǎn)查找操作時(shí),先根據(jù)key計(jì)算hash值,然后順時(shí)針找到第一個(gè)大于等于該hash的token節(jié)點(diǎn).

好處:
這種方式最大的好處就是,在加入或刪除節(jié)點(diǎn)時(shí),只影響hash環(huán)中相鄰的兩個(gè)節(jié)點(diǎn),對(duì)其他節(jié)點(diǎn)無影響.

問題:


image.png

3.虛擬槽算法

使用分散度較好的hash函數(shù),將所有的數(shù)據(jù)映射到 比如0~16383(2^14)范圍的槽中(slot).這個(gè)槽的數(shù)量一般遠(yuǎn)遠(yuǎn)大于實(shí)例的數(shù)量.

槽是集群數(shù)據(jù)管理和遷移的基本單位.采用大范圍槽的主要目的是為了方便數(shù)據(jù)拆分和集群擴(kuò)展.

每一個(gè)實(shí)例會(huì)映射一部分范圍的槽.

特點(diǎn):
1.解耦數(shù)據(jù)和節(jié)點(diǎn)之間的關(guān)系,簡化擴(kuò)容和鎖容的難度
2.節(jié)點(diǎn)自身維護(hù)槽的映射關(guān)系,不需要客戶端或代理服務(wù)維護(hù)槽分區(qū)的元數(shù)據(jù).
3.支持節(jié)點(diǎn),槽,鍵之間的映射查詢,用于數(shù)據(jù)路由,在線伸縮燈場景.

HashTags(面試)
Mset k1 v1 k2 v2 k3 v3
通過分片手段,可以將數(shù)據(jù)合理的劃分到不同的節(jié)點(diǎn)上,這本來是一件好事。但是有的時(shí)候蛀序,我們希望對(duì)相關(guān)聯(lián)的業(yè)務(wù)以原子性方式進(jìn)行操作堪夭。舉個(gè)簡單的例子
我們?cè)趩喂?jié)點(diǎn)上執(zhí)行MSET (m表示多個(gè)饱苟,一次向redis設(shè)置多個(gè)key和值), 它是一個(gè)原子性的操作瓦呼,我們要求所有給定的key要在同一時(shí)間內(nèi)被設(shè)置涨共,不能出現(xiàn)某些指定的key被更新另一些指定的key沒有被更新的情況岖寞。但是在集群環(huán)境下抡四,我們?nèi)匀豢梢詧?zhí)行MSET命令,但它的操作不在是原子操作仗谆,會(huì)存在某些指定的key被更新指巡,而另外一些指定的key沒有改變,原因是多個(gè)key可能會(huì)被分配到不同的機(jī)器上隶垮。
所以藻雪,這里就會(huì)存在一個(gè)矛盾點(diǎn),及要求key盡可能的分散在不同機(jī)器狸吞,又要求某些相關(guān)聯(lián)的key分配到相同機(jī)器勉耀。
這個(gè)也是在面試的時(shí)候會(huì)容易被問到的內(nèi)容。怎么解決呢蹋偏?
從前面的分析中我們了解到便斥,分片其實(shí)就是一個(gè)hash的過程,對(duì)key做hash取模然后劃分到不同的機(jī)器上威始。所以為了解決這個(gè)問題枢纠,我們需要考慮如何讓相關(guān)聯(lián)的key得到的hash值都相同呢?如果key全部相同是不現(xiàn)實(shí)的黎棠,所以怎么解決呢晋渺?在redis中引入了HashTag的概念镰绎,可以使得數(shù)據(jù)分布算法可以根據(jù)key的某一個(gè)部分進(jìn)行計(jì)算,然后讓相關(guān)的key落到同一個(gè)數(shù)據(jù)分片些举;
舉個(gè)簡單的例子跟狱,假如對(duì)于用戶的信息進(jìn)行存儲(chǔ)俭厚,
redis:store:1001户魏、redis:store:1002
那么通過hashtag的方式,
redis:{store}:1001挪挤、redis:{store}:1002; 表示
當(dāng)一個(gè)key包含 {} 的時(shí)候叼丑,就不對(duì)整個(gè)key做hash,而僅對(duì) {} 包括的字符串做hash扛门。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鸠信,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子论寨,更是在濱河造成了極大的恐慌星立,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件葬凳,死亡現(xiàn)場離奇詭異绰垂,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)火焰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門劲装,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人昌简,你說我怎么就攤上這事占业。” “怎么了纯赎?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵谦疾,是天一觀的道長。 經(jīng)常有香客問我犬金,道長餐蔬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任佑附,我火速辦了婚禮樊诺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘音同。我一直安慰自己词爬,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布权均。 她就那樣靜靜地躺著顿膨,像睡著了一般锅锨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上恋沃,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天必搞,我揣著相機(jī)與錄音,去河邊找鬼囊咏。 笑死恕洲,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的梅割。 我是一名探鬼主播霜第,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼户辞!你這毒婦竟也來了泌类?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤底燎,失蹤者是張志新(化名)和其女友劉穎刃榨,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體双仍,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡枢希,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了殊校。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晴玖。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖为流,靈堂內(nèi)的尸體忽然破棺而出呕屎,到底是詐尸還是另有隱情,我是刑警寧澤敬察,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布秀睛,位于F島的核電站,受9級(jí)特大地震影響莲祸,放射性物質(zhì)發(fā)生泄漏蹂安。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一锐帜、第九天 我趴在偏房一處隱蔽的房頂上張望田盈。 院中可真熱鬧,春花似錦缴阎、人聲如沸允瞧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽述暂。三九已至痹升,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間畦韭,已是汗流浹背疼蛾。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留艺配,地道東北人察郁。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像妒挎,于是被迫代替她去往敵國和親绳锅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子西饵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348