為了解決Redis單機的內存流量瓶頸,出現了Redis Cluster分布式解決方案
同時也引入了兩個問題
1. 數據分區規則制定
2. 集群擴容&集群收縮解決
常見的分區規則有哈希分區和順序分區。Redis Cluster采用了哈希分區。

常見的哈希分區規則有 **節點取余分區**,**一致性哈希分區**,**虛擬槽分區**
## 節點取余分區
> 計算公式:hash(key) % N
優點是使用方便,缺點是擴容或者收縮節點時,需要重新生成節點數據。

## 一致性哈希分區
> 給每個節點分配一個token,取值范圍在1~2^32,這些token構成了一個哈希圓環。進行數據讀寫時,根據key計算hash值,順時針查找第一個大于該hash值的token節點。
* 相比節點取余分區,一致性哈希分區在添加刪除節點時,只會影響指定節點的相鄰節點。
* 當哈希圓環中的節點數量過少時,節點數量變化影響的數據面更廣。
* 想要在節點數量變化的同時保證負載均衡,需要增加或者減少一倍的節點數。

## 虛擬槽分區
通過哈希算法將key均勻的映射到指定范圍的整數,整數定位為槽(slots)。每個節點負責指定數量的槽。比如Redis Cluster的槽范圍時0~16383。
計算公式:slot = CRC16(key)&16383 。
> 在key和節點之間新增了一層代理(slot),節點數量發生變化時,只對槽和節點的映射關系做變更,實現了跟客戶端的解耦。

## 分布式方案突破了單機的內存CPU限制的同時,也帶來了一些問題
* mget,mset命令只支持具有相同slot值的key。
* 事務操作只支持處于同一節點上的key
*