-
鍵遷移概述:
- 鍵遷移就是把數據由一個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之間進行傳輸
演示案例
三、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的提示
演示案例②