Redis Cluser
使用此種分區規則
- 哈希分區和順序分區對比
- 分佈式存儲數據分區圖
Redis
的鍵或用戶ID
,再根據節點數量N
使用公式:hash(key)%N
計算出哈希值,用來決定數據映射到哪個節點上
- 翻倍擴容遷移約50%數據
token
,範圍通常在0~232,這些token
構成一個哈希環。數據讀寫執行節點查找操做時,先根據key
計算hash
值,而後順時針找到第一個大於等於該哈希值的token
節點
- 一致性哈希數據分佈
Redis Cluser
使用此種分區類型Redis Cluster
槽範圍是0~16383。槽是集羣內數據管理和遷移的基本單位。採用大範圍槽的主要目的是爲了方便數據拆分和集羣擴展
- 槽集合與節點關係
Redis
數據分區Redis Cluser
採用虛擬槽分區, 全部的鍵根據哈希函數映射到0~16383
整數槽內, 計算公式: slot=CRC16(key) &16383
。 每個節點負責維護一部分槽以及槽所映射的鍵值數據
- 使用CRC16(key) &16383將鍵映射到槽上
Redis
集羣功能限制Redis
集羣相對單機在功能上存在一些限制
key
批量操做支持有限。如mset
、 mget
, 目前只支持具備相同slot
值的key
執行批量操做。 對於映射爲不一樣slot
值的key
因爲執行mget
、 mget
等操做可能存在於多個節點上所以不被支持key
事務操做支持有限,只支持多key
在同一節點上的事務操做,當多個key
分佈在不一樣的節點上時沒法使用事務功能key
做爲數據分區的最小粒度, 所以不能將一個大的鍵值對象如hash
、 list
等映射到不一樣的節點Redis
能夠支持16
個數據庫, 集羣模式下只能使用一個數據庫空間, 即db0
Redis Cluster
很是有幫助