Redis(開發與運維):08---鍵遷移(move、dump、restore、migrate)

  • 鍵遷移概述:

    • 鍵遷移就是把數據由一個Redis遷移到另一個Redis(例如從生產環境遷移到測試環境),或者在數據庫之間進行遷移
    • 鍵遷移有三種方式:move、dump+restore、migrate
    • 下面是三種方式的比較,建議使用migrate:

一、move

move key db
  • 功能:將參數所指的key從當前源數據庫遷移到指定的數據庫中
  • 這個命令是在單個Redis內部進行是用戶具有遷移

  • 這個命令在實際生產環境中不建議使用

二、dump+restore

dump key

restore key ttl value
  • 功能:這兩個命令的組合可以實現在不同的Redis數據庫實例之間進行數據遷移
  • 整個遷移過程分爲兩步:
    • 源Redis端執行dump命令,將key鍵值序列化,格式採用的是RDB格式
    • 目標Redis端執行restore命令,將上面序列化的值進行復原,其中ttl參數代表過期時間(如果爲0代表沒有過期時間)

備註說明

  • 有兩點需要注意:
    • 第一,整個遷移過程並非原子性的,而是通過客戶端分步完成的
    • 第二,遷移過程是使用兩個客戶端連接傳輸,不是在源Redis和目標Redis之間進行傳輸

演示案例

  • 在源Redis上執行dum:

  • 在目標Redis上執行restore:

  • 上面2步對應的僞代碼如下:

三、migrate

  • migrate命令也是用於在Redis實例間進行數據遷移的
  • 實際上migrate命令就是將dump、restore、del三個命令進行組合,從而簡化了操作流程
  • migrate命令具有原子性,而且從Redis3.0.6版本以後已經支持遷移多個鍵的功能,有效地提高了遷移效率,migrate在水平擴容(後面文章有介紹)中起到重要作用

遷移過程如下

  • 整個過程如下圖所示:

  • 實現過程和dump+restore基本類似,但是有3點不太相同:
    • 第一,整個過程是原子執行的,不需要在多個Redis實例上開啓 客戶端的,只需要在源Redis上執行migrate命令即可
    • 第二,migrate命令的數據傳輸直接在源Redis和目標Redis上完成的
    • 第三,目標Redis完成restore後會發送OK給源Redis,源Redis接收後會根據migrate對應的選項來決定是否在源Redis上刪除對應的鍵

命令格式

migrate  host  port  key|""  destination-db  timeout [copy] [replace] [keys key [key 
  • 參數介紹如下:
    • host:目標Redis的IP地址
    • port:目標Redis的端口
    • key|"":在Redis3.0.6版本之前,migrate只支持遷移一個鍵,所以此處是要遷移的鍵,但Redis3.0.6版本之後支持遷移多個鍵,如果當前需要遷移多個鍵,此處爲空字符串""
    • destination-db:目標Redis的數據庫索引,例如要遷移到0號數據庫,這裏就寫0。
    • timeout:遷移的超時時間(單位爲毫秒)
    • [copy]:如果添加此選項,遷移後並不刪除源鍵
    • [replace]:如果添加此選項,migrate不管目標Redis是否存在該鍵都會 正常遷移進行數據覆蓋
    • [keys key[key...]]:遷移多個鍵,例如要遷移key1、key2、key3,此處填 寫“keys key1 key2 key3”

演示案例①

  • 情況1:源Redis有鍵hello,目標Redis沒有,遷移成功

  • 情況2:源Redis和目標Redis都有鍵hello:
    • 如果migrate命令沒有加replace選項會收到錯誤提示(下面演示這種)
    • 如果加了replace會返回OK表明遷移成功(讀者自己演示)

  • 情況3:源Redis沒有鍵hello,此種情況會收到nokey的提示

演示案例②

  • 源Redis批量添加多個鍵

  • 源Redis執行如下命令完成多個鍵的遷移

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章