1. 程式人生 > >Redis叢集原理分析

Redis叢集原理分析

Redis叢集的原理主要是圍繞著‘槽’的概念展開的,先來理解叢集中‘槽’的概念。reids叢集是通過將所有的key進行分割槽來實現的,redis叢集最多有16384個分割槽(也可以稱作‘槽’,英文:slot),然後在叢集節點中指定分割槽範圍來實現。例如:叢集中的節點A負責0 - 10000,節點B負責 10001-16384,每個節點負責的分割槽數可以自行設定。redis中的每一個key都有唯一的分割槽號與其對應,可以通過如下命令查詢:

cluster keyslot "keyName" 

原始碼中計算分割槽號的方式很簡單,如下:

def slot_number(key):
	return CRC16(key) & 16383

當設定好redis叢集中每個節點的分割槽範圍之後,整個叢集才處於可使用狀態,並且叢集的分割槽範圍配置資訊會在節點之間進行同步。當一個set或者get命令來到叢集中的任何一個節點時,都會先計算key的分割槽號,如果不屬於當前節點的分割槽,則節點會發送轉移命令給客戶端,讓客戶端去相應的節點請求資料,至此完成叢集工作。

重新分片:可以讓叢集動態的新增節點和移除節點,通過配置節點的分割槽範圍來實現‘重新分割槽’。