?
This document uses PHP Chinese website manual Release
MIGRATE host port key|"" destination-db timeout [COPY] [REPLACE] [KEYS key [key ...]]
自2.6.0起可用。
時(shí)間復(fù)雜度:該命令實(shí)際上在源實(shí)例中執(zhí)行 DUMP + DEL,并在目標(biāo)實(shí)例中執(zhí)行 RESTORE。查看這些命令的頁面以了解時(shí)間復(fù)雜性。此外還執(zhí)行兩個(gè)實(shí)例之間的O(N)數(shù)據(jù)傳輸。
將來自源 Redis 實(shí)例的密鑰以原子方式傳輸?shù)侥繕?biāo) Redis 實(shí)例。成功時(shí),密鑰從原始實(shí)例中刪除,并保證存在于目標(biāo)實(shí)例中。
該命令是原子性的,并在傳輸密鑰所需的時(shí)間內(nèi)阻塞兩個(gè)實(shí)例,在任何給定時(shí)間,密鑰似乎都會(huì)存在于給定實(shí)例中或其他實(shí)例中,除非發(fā)生超時(shí)錯(cuò)誤。在3.2和更高版本中,通過傳遞空字符串(“”)作為鍵并添加 KEYS 子句,可以在 MIGRATE 的單個(gè)調(diào)用中對(duì)多個(gè)鍵進(jìn)行流水線處理。
該命令在內(nèi)部使用 DUMP 生成鍵值的序列化版本,并使用RESTORE 來合成目標(biāo)實(shí)例中的鍵。源實(shí)例充當(dāng)目標(biāo)實(shí)例的客戶端。如果目標(biāo)實(shí)例向 RESTORE 命令返回 OK,則源實(shí)例將使用DEL刪除該密鑰。
超時(shí)指定與目標(biāo)實(shí)例通信的任何時(shí)刻的最大空閑時(shí)間,以毫秒為單位。這意味著操作不需要在指定的毫秒數(shù)內(nèi)完成,但是傳輸應(yīng)該在沒有阻塞超過指定的毫秒數(shù)的情況下進(jìn)行。
MIGRATE 需要執(zhí)行 I / O 操作并遵守指定的超時(shí)。當(dāng)傳輸過程中發(fā)生 I / O 錯(cuò)誤或達(dá)到超時(shí)時(shí),操作中止,并IOERR
返回特殊錯(cuò)誤。發(fā)生這種情況時(shí),以下兩種情況是可能的:
密鑰可能在兩個(gè)實(shí)例上。
密鑰可能只在源實(shí)例中。
發(fā)生超時(shí)時(shí)密鑰不可能丟失,但如果發(fā)生超時(shí)錯(cuò)誤,客戶端調(diào)用MIGRATE 應(yīng)檢查密鑰是否也存在于目標(biāo)實(shí)例中,并相應(yīng)采取相應(yīng)措施。
當(dāng)返回任何其他錯(cuò)誤時(shí)(從開始ERR
) MIGRATE 保證密鑰仍然僅存在于初始實(shí)例中(除非同名的密鑰已經(jīng)存在于目標(biāo)實(shí)例中)。
如果沒有在源實(shí)例中遷移的密鑰NOKEY
返回。因?yàn)樵谡G闆r下丟失的密鑰是可能的,例如從失效到NOKEY
不是錯(cuò)誤。
從Redis 3.0.6開始 MIGRATE 支持一種新的批量遷移模式,該模式使用流水線技術(shù)來遷移實(shí)例間的多個(gè)密鑰,而不會(huì)產(chǎn)生往返時(shí)間延遲以及使用單個(gè) MIGRATE 調(diào)用移動(dòng)每個(gè)密鑰時(shí)存在的其他開銷。
為了啟用此表單,使用了 KEYS 選項(xiàng),并將常規(guī)鍵參數(shù)設(shè)置為空字符串。實(shí)際的鍵名將在 KEYS 參數(shù)本身之后提供,如下例所示:
當(dāng)使用這種形式NOKEY
時(shí),只有在實(shí)例中沒有任何鍵時(shí)才返回狀態(tài)碼,否則即使只有一個(gè)鍵存在,命令也會(huì)執(zhí)行。
COPY
- 不要從本地實(shí)例中刪除密鑰。
REPLACE
- 替換遠(yuǎn)程實(shí)例上的現(xiàn)有密鑰。
keys - 如果鍵參數(shù)是一個(gè)空字符串,則該命令將遷移 KEYS 選項(xiàng)后面的所有鍵(有關(guān)詳細(xì)信息,請(qǐng)參閱上面的部分)。
COPY
并且REPLACE
僅在3.0及以上版本中可用。KEYS可以從Redis 3.0.6開始使用。
簡單字符串回復(fù):該命令在成功時(shí)返回OK,或者NOKEY
如果在源實(shí)例中未找到任何密鑰。