部分摘自:並作修改
redis cluster 是 redis 原生的資料分片實現,可以自動在多個節點上分布資料,不需要依賴任何外部的工具。
redis cluster 中所有 key 會被分派到16384
個slot
(hash 槽)中,這些 slot 又會被指派到多個 redis 節點上。
乙個 key 會對映到某個 slot,演算法:
hash_slot = crc16(key) mod 16384
不像單機redis,redis cluster 只支援乙個資料庫(database 0),select
命令就不能用了,但實際也很少有人使用多資料庫,所以這個限制並沒什麼影響。
multi-key 即 多key。
某些情況是多 key 的操作,例如:
這類情況都需要特別注意,因為:redis cluster 要求,只有這些 key 都在同乙個 slot 時才能執行。
例如,有2個key,key1 和 key2。
key1 是對映到 5500 這個 slot 上,儲存在 node a。
key2 是對映到 5501 這個 slot 上,儲存在 node b。
那麼就不能對 key1 和 key2 做事務操作。
對於多key場景,需要做好資料空間的設計,redis cluster 提供了乙個hash tag
的機制,可以讓我們把一組 key 對映到同乙個 slot。
例如:user1000.following
這個 key 儲存使用者 user1000 關注的使用者;user1000.followers
儲存使用者 user1000 的粉絲。
這兩個 key 有乙個共同的部分user1000
,可以指定對這個共同的部分做 slot 對映計算,這樣他們就可以在同乙個槽中了。
使用方式:
.following 和 .followers
就是把共同的部分使用
包起來,計算 slot 值時,如果發現了花括號,就會只對其中的部分進行計算:
hash tags 【注意:位置任意,例如user::ids和user::tweets】multi-key 這一點是 redis cluster 對於我們日常使用中最大的限制,一定要注意,如果多key不在同乙個 slot 中就會報錯,例如:hashtag機制可以影響key被分配到的slot,從而可以使用那些被限制在slot中操作。
hashtag即是用
{}
包裹key的乙個子串,如1
,2
。在設定了hashtag的情況下,集群會根據hashtag決定key分配到的slot, 兩個key擁有相同的hashtag:
, 它們會被分配到同乙個slot,允許我們使用mget命令。
通常情況下,hashtag不支援巢狀,即將第乙個中間的內容作為hashtag。若花括號中不包含任何內容則會對整個key進行雜湊,如
{}user:
。hashtag可能會使過多的key分配到同乙個slot中,造成資料傾斜影響系統的吞吐量,務必謹慎使用。
(error) crossslot keys in request don't hash to the same slot
需要使用hash tag
設計好 key 的空間。 redis cluster的資料遷移
我們可以參考redis trip或者cachecloud的 來了解cluster資料遷移的流程,主要分為如下幾部 設定遷移中的節點狀態,比如要把slot x的資料從節點a遷移到節點b的話,需要把a設定成migrating狀態,b設定成importing狀態。1cluster setslot impo...
CygWin安裝RedisCluster指南
安裝前確認磁碟有6g以上的磁碟容量,安裝時雙擊setup x86 64.exe,基本按照預設設定安裝就行,也可自己指定安裝路徑等,3 deps hiredis net.c中注釋掉 並在 include sds.h 之後追加 ifdef cygwin define tcp keepcnt 8 defi...
RedisCluster搭建步驟
安裝redis 配置並啟動redis節點 選兩台機器執行該步驟 把redis安裝目錄redis.conf修改如下並複製進對應的700 資料夾 bind 10.11.147.40 redis安裝機器ip 注意這裡千萬不要用127.0.0.1或者注釋掉這行,以上兩種都會導致遠端機器連線不到redis p...