溫馨提示×

溫馨提示×

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

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

Redis Cluster是什么

發(fā)布時(shí)間:2021-12-20 10:43:21 來源:億速云 閱讀:212 作者:小新 欄目:大數(shù)據(jù)

這篇文章主要為大家展示了“Redis Cluster是什么”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Redis Cluster是什么”這篇文章吧。

Redis Cluster是Redis的分布式解決方案。當(dāng)遇到內(nèi)存、并發(fā)、流量等瓶頸時(shí),就可以采用Cluster架構(gòu)達(dá)到負(fù)載均衡目的。因?yàn)镽edis Cluster是Redis3.0版本之后才有的,所以在Redis3.0版本之前,Redis分布式的解決方案一般有兩種:

  • 客戶端分區(qū)方案,優(yōu)點(diǎn)是分區(qū)邏輯可控,缺點(diǎn)是需要自己處理數(shù)據(jù)路由、高可用、故障轉(zhuǎn)移等問題。

  • 代理方案,優(yōu)點(diǎn)是簡化客戶端分布式邏輯和升級維護(hù)便利,缺點(diǎn)是加重架構(gòu)部署復(fù)雜度和性能損耗。

既然Redis已經(jīng)為我們提供了分布式的解決方案Redis Cluster那么下面我們將詳細(xì)介紹一下Redis Cluster的功能。

  • 數(shù)據(jù)分布

Redis分布式集群首先要解決的問題就是把整個(gè)數(shù)據(jù)集按照分區(qū)規(guī)則映射到多個(gè)節(jié)點(diǎn)。所以下面我們介紹一下數(shù)據(jù)分區(qū)的規(guī)則。常見的分區(qū)規(guī)則有哈希分區(qū)和順序分區(qū)兩種。下表是這兩種分區(qū)的對比。

Redis Cluster是什么

看上圖我們知道Redis Cluster采用的是哈希分區(qū)方式。所以下面我們重點(diǎn)介紹一下哈希分區(qū)的知識。

哈希分區(qū)主要有3種下面我們分別介紹一下它們3種的區(qū)別。

1.節(jié)點(diǎn)取余分區(qū)

使用特定的數(shù)據(jù),例如Redis的鍵或者用戶ID,在根據(jù)節(jié)點(diǎn)數(shù)量N使用公式:hash(key) % N計(jì)算出哈希值,用來決定數(shù)據(jù)映射到哪一個(gè)節(jié)點(diǎn)上。但這種分區(qū)有一個(gè)問題,就是當(dāng)節(jié)點(diǎn)數(shù)量變化時(shí),例如擴(kuò)容或減少節(jié)點(diǎn),數(shù)據(jù)節(jié)點(diǎn)映射關(guān)系都要重新計(jì)算。

Redis Cluster是什么

2.一致性哈希分區(qū)

一致性哈希分區(qū)是為系統(tǒng)中的每個(gè)節(jié)點(diǎn)分配一個(gè)token,這些token構(gòu)成了一個(gè)哈希環(huán)。數(shù)據(jù)讀寫執(zhí)行節(jié)點(diǎn)查找操作時(shí),先根據(jù)key計(jì)算hash值,然后順時(shí)針找到第一個(gè)大于等于哈希值的token節(jié)點(diǎn)。

這種方式相比節(jié)點(diǎn)取余最大的好處是加入和刪除節(jié)點(diǎn)只影響哈希環(huán)中相鄰的節(jié)點(diǎn),而對其它節(jié)點(diǎn)無任何影響。但這種分區(qū)也有它的弊端。下面我們看一下這種分區(qū)的弊端:

  • 加減節(jié)點(diǎn)會造成哈希環(huán)中部分?jǐn)?shù)據(jù)無法命中,需要手動(dòng)處理或者忽略這部分?jǐn)?shù)據(jù),因此一致性哈希常常用于緩存場景。

  • 當(dāng)使用少量節(jié)點(diǎn)時(shí),節(jié)點(diǎn)變化將大范圍影響哈希環(huán)中的數(shù)據(jù)映射,因此這種方式不適合少量數(shù)據(jù)節(jié)點(diǎn)的分布式方案。

  • 普通的一致性哈希分區(qū)在增減節(jié)點(diǎn)時(shí)需要增加一倍或減去一半節(jié)點(diǎn)才能保證數(shù)據(jù)和負(fù)載均衡。

Redis Cluster是什么

3.虛擬槽分區(qū)

虛擬槽分區(qū)巧妙的使用了哈??臻g,使用分散度良好的哈希函數(shù)把所有數(shù)據(jù)映射到一個(gè)固定范圍的整數(shù)集合中,整數(shù)定義為槽。這個(gè)范圍一般遠(yuǎn)遠(yuǎn)大于節(jié)點(diǎn)數(shù)。槽是集群內(nèi)數(shù)據(jù)管理和遷移的基本單位。每個(gè)節(jié)點(diǎn)都會負(fù)責(zé)一定數(shù)量的槽。因?yàn)镽edis Cluser采用的就是虛擬槽,所以下面重點(diǎn)介紹一下Redis的數(shù)據(jù)分區(qū)。


  • Redis數(shù)據(jù)分區(qū)

Redis Cluser采用的是虛擬槽分區(qū),所有的鍵根據(jù)哈希函數(shù)映射到0-16383整數(shù)槽內(nèi),計(jì)算公式:slot=CRC16(key) & 16383。每一個(gè)節(jié)點(diǎn)負(fù)責(zé)維護(hù)一部分槽以及槽所映射的鍵值數(shù)據(jù)。

Redis Cluster是什么

Redis虛擬槽分區(qū)的特點(diǎn):

  • 解耦數(shù)據(jù)和節(jié)點(diǎn)之間的關(guān)系,簡化了節(jié)點(diǎn)擴(kuò)容和收縮難度。

  • 節(jié)點(diǎn)自身維護(hù)槽的映射關(guān)系,不需要客戶端或者代理服務(wù)維護(hù)槽分區(qū)元數(shù)據(jù)。

  • 支持節(jié)點(diǎn)、槽、鍵之間的映射查詢,用于數(shù)據(jù)路由、在線伸縮等場景。


  • 集群功能限制

Redis集群相對于單機(jī)來說在功能上存在一些限制,下面我們看一下具體限制:

1.key批量操作支持有限。如mset、mget,目前只支持具有相同slot值的key執(zhí)行批量操作。對于映射為不同的slot值的key由于mset、mget操作可能存在于多個(gè)節(jié)點(diǎn)上因此不被支持。

2.key事務(wù)操作支持有限。并且只支持多key在同一個(gè)節(jié)點(diǎn)上的事務(wù)操作,當(dāng)多個(gè)key分布在不同的節(jié)點(diǎn)上時(shí)無法使用事務(wù)功能。

3.key作為數(shù)據(jù)分區(qū)的最小粒度,因此不能將一個(gè)大的鍵值對象如hash、list等映射到不同的節(jié)點(diǎn)。

4.不支持多數(shù)據(jù)庫空間,單機(jī)下的Redis可以支持16個(gè)數(shù)據(jù)庫,集群模式下只能使用一個(gè)數(shù)據(jù)庫空間。即 db 0。

5.復(fù)制結(jié)構(gòu)只支持一層,從節(jié)點(diǎn)只能復(fù)制主節(jié)點(diǎn),不支持樹狀復(fù)制結(jié)構(gòu)。

以上是“Redis Cluster是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI