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

生成遷移數據命令

發布時間: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

閱讀全文

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

熱點內容
原子幣app在哪裡注冊的 瀏覽:526
php數組保存文件 瀏覽:224
無理的命令 瀏覽:508
問道手游解壓失敗是什麼原因 瀏覽:776
mysql命令提示 瀏覽:371
apachephp中文亂碼 瀏覽:340
pythonimportpylab 瀏覽:238
阿里雲app伺服器價格表 瀏覽:981
appstore怎麼搶手機 瀏覽:845
列印伺服器是什麼列印隊列 瀏覽:359
網上怎麼用app辦理營業執照 瀏覽:861
sql如何查看伺服器地址 瀏覽:779
編譯速度和系統有關嗎 瀏覽:58
復盛製冷壓縮機 瀏覽:982
雲伺服器共享手機流量 瀏覽:842
星界邊境像素壓縮 瀏覽:459
演算法分析與設計二手 瀏覽:983
學編程如何配電腦 瀏覽:971
怎麼看特徵找卡密的加密方式 瀏覽:526
方舟非官方伺服器怎麼賺錢 瀏覽:517