導航:首頁 > 程序命令 > 生成遷移數據命令

生成遷移數據命令

發布時間:2024-03-11 21:33:46

Ⅰ 【Redis】Redis Cluster-集群數據遷移

Redis通過對KEY計算hash,將KEY映射到slot,集群中每個節點負責一部分slot的方式管理數據,slot最大個數為16384。
在集群節點對應的結構體變數clusterNode中可以看到slots數組,數組的大小為CLUSTER_SLOTS除以8,CLUSTER_SLOTS的值是16384:

clusterState

clusterNode裡面保存了節點相關的信息,集群數據遷移信息並未保存在clusterNode中,而是使用了clusterState結構體來保存:

clusterState與clusterNode的關系

在手動進行數據遷移時,需要執行以下步驟:

在進行數據遷移之前,首先在需要遷入的目標節點使用 SETSLOT 命令標記要將SLOT從哪個節點遷入到當前節點:

然後在源節點也就是slot所在節點使用 MIGRATING 命令標記將數據遷出到哪個節點:

比如slot1當前在node1中,需要將slot1遷出到node2,那麼首先在nodd2上執行 IMPORTING 命令,標記slot准備從node1遷到當前節點node2中:

然後在node1中執行 MIGRATING 命令標記slot1需要遷移到node2:

clusterCommand
SETSLOT 命令的處理在clusterCommand函數(cluster.c文件中)中:

在標記完遷入、遷出節點後,就可以使用 CLUSTER GETKEYSINSLOT 命令獲取待遷出的KEY:

<slot>:哈希槽的值

<count>:遷出KEY的數量

getkeysinslot 命令的處理也在clusterCommand函數中,處理邏輯如下:

完成上兩步之後,接下來需要在源節點中執行 MIGRATE 命令進行數據遷移, MIGRATE 既支持單個KEY的遷移,也支持多個KEY的遷移,語法如下:

migrateCommand

MIGRATE 命令對應的處理函數在migrateCommand中(cluster.c文件中),處理邏輯如下:

createDumpPayload

createDumpPayload函數在cluster.c文件中:

restoreCommand

目標節點收到遷移的數據的處理邏輯在restoreCommand中(cluster.c文件中):

數據遷移的最後一步, 需要使用 CLUSTER SETSLOT 命令,在源節點和目標節點執行以下命令,標記slot最終所屬的節點,並清除第一步中標記的遷移信息

<slot>:哈希槽

<node>:哈希槽最終所在節點id

clusterCommand

CLUSTER SETSLOT <slot> NODE <node> 命令的處理依舊在 clusterCommand 函數中,處理邏輯如下:

總結

參考

極客時間 - Redis源碼剖析與實戰(蔣德鈞)

Redis版本:redis-6.2.5

閱讀全文

與生成遷移數據命令相關的資料

熱點內容
浩辰cad命令行 瀏覽:349
移動加密思路 瀏覽:968
php手冊pdf 瀏覽:750
安卓手機推薦什麼鍵位 瀏覽:112
android登錄驗證碼 瀏覽:474
聯通雲伺服器管理賬號 瀏覽:309
蘋果7加密晶元壞了 瀏覽:514
壓縮包2g解壓後有多大 瀏覽:954
php人才管理系統 瀏覽:19
宏命令結構 瀏覽:898
為什麼安卓手機開淘寶會卡 瀏覽:934
啟迪人生編程教程 瀏覽:294
intouch正在編譯無法打開 瀏覽:835
什麼編譯器適合做網頁 瀏覽:850
如何破解騰訊伺服器 瀏覽:87
嵌入式能編譯文件的許可權 瀏覽:12
轎車空調壓縮機突然怎麼不工作了 瀏覽:432
dd命令怎麼解壓 瀏覽:397
舊版安卓怎麼開鎖 瀏覽:247
開發程序員推薦 瀏覽:263