中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

redis的一致性hash和hash槽是什么

發布時間:2022-03-28 14:11:46 來源:億速云 閱讀:343 作者:iii 欄目:關系型數據庫

這篇文章主要講解了“redis的一致性hash和hash槽是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“redis的一致性hash和hash槽是什么”吧!

redis的一致性hash和hash槽是什么

假如我們現在有x臺緩存設備,我們在決定把數據放到哪個緩存設備上的時候可以key%x,但是如果發生擴容或者節點丟失你就需要key%(x±y)這樣就會遇到大量的數據遷移問題,一致性hash和hash槽就可以避免這種問題。

一致性hash原理

普通的hash是對服務器的數量取余,一致性hash是對特定的數字取余(2^32)不會因為服務器的數量變化,首先我們對服務器的ip或者其他唯一標識取余得到一個值這個值就是服務器在hash環上的位置,然后對要放入服務器的對象進行hash得到一個值,在hash換上找對應的服務器如果值所在的位置沒有服務器就看下一個位置是否服務器知道找到可存儲的服務器。

1、環形空間

按照常用的hash算法來將對應的key哈希到一個具有2的32 次方個節點的空間中,即0 ~ (2的32)-1的數字空間中。我們可以把這個東西想象成一個咬住尾巴的,形成了一個閉環。
redis的一致性hash和hash槽是什么

2、服務器hash到環上

環有了我們現在需要把服務器放到環上,可以根據服務器的IP地址獲取編號等唯一標識取hash后放到環上。
redis的一致性hash和hash槽是什么

3、數據存儲和獲取

當我們需要把一個數據放到服務器上的時候我們首先需要計算數據的hash值然后取余,如果取余后的值在環上有對應的服務器那直接放進去如果沒有則向后查找。
redis的一致性hash和hash槽是什么
所以最后data1在redis1里面,data2在redis2里面。當我們獲取數據的時候也是執行相同的過程,計算key的hash值,然后根據相同的規則獲取存儲的服務器。

4、服務器的刪除和添加

如果現在某個redis節點掛掉了,那么其他節點里面的數據是還在的,原來節點里面的數據會被重新分配到下一個節點里面。
如果在環境中新增一臺服務器RedisNeo,通過hash算法將RedisNeo映射到環中,通過按順時針遷移的規則,那么以前hash值在Redis2和RedisNeo之間的數據遷移到RedisNeo里面(下圖中RedisNeo挨著Redis2),其它對象還保持這原有的存儲位置。通過對節點的添加和刪除的分析,一致性哈希算法在保持了單調性的同時,還是數據的遷移達到了最小,這樣的算法對分布式集群來說是非常合適的,避免了大量數據遷移,減小了服務器的的壓力。
redis的一致性hash和hash槽是什么
所以redisNeo加入后data3就到redisNeo里面去了。

5、平衡性

到目前為止一致性hash也可以算做完成了,但是有一個問題還需要解決,那就是平衡性。從下圖我們可以看出,當服務器節點比較少的時候,會出現一個問題,就是此時必然造成大量數據集中到一個節點上面,例如你只有兩個節點一個在1另一個在10,那么很顯然1節點的壓力是無限大的,因為只有hash值在[2,10]之間的才會到10節點,其他的全到1節點上去了,為了解決這種數據傾斜問題,一致性哈希算法引入了虛擬節點機制,即對每一個服務節點計算多個哈希,每個計算結果位置都放置一個此服務節點,稱為虛擬節點。具體做法可以先確定每個物理節點關聯的虛擬節點數量,然后在ip或者主機名后面增加編號,同時數據定位算法不變,只是多了一步虛擬節點到實際節點的映射。

hash槽

哈希槽是在redis cluster集群方案中采用的,redis cluster集群沒有采用一致性哈希方案,而是采用數據分片中的哈希槽來進行數據存儲與讀取的。redis cluster采用數據分片的哈希槽來進行數據存儲和數據的讀取。redis cluster一共有2^14(16384)個槽,所有的master節點都會有一個槽區比如0~1000,槽數是可以遷移的。master節點的slave節點不分配槽,只擁有讀權限。但是注意在代碼中redis cluster執行讀寫操作的都是master節點,并不是你想 的讀是從節點,寫是主節點。第一次新建redis cluster時,16384個槽是被master節點均勻分布的。
redis的一致性hash和hash槽是什么
和一致性哈希相比在擴容和縮容的時候需要手動手動分配hash槽,并且在刪除master節點的時候要把他的從節點和hash槽交給其他master節點;hash槽的是根據CRC-16(key)%16384的值來判斷屬于哪個槽區。

感謝各位的閱讀,以上就是“redis的一致性hash和hash槽是什么”的內容了,經過本文的學習后,相信大家對redis的一致性hash和hash槽是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

琼中| 青浦区| 遵义县| 织金县| 林口县| 海门市| 太仆寺旗| 化德县| 杂多县| 吴忠市| 博罗县| 东至县| 麟游县| 惠安县| 拉孜县| 晋城| 广德县| 息烽县| 高尔夫| 垫江县| 威海市| 娄底市| 班戈县| 图木舒克市| 奈曼旗| 永康市| 夏邑县| 滁州市| 石楼县| 年辖:市辖区| 雅江县| 新郑市| 神池县| 黑水县| 婺源县| 辽宁省| 江川县| 普陀区| 当雄县| 焦作市| 泸州市|