Redis鍵遷移(move、dump、restore、migrate)的三種實(shí)現(xiàn)
一、鍵遷移概述
- 鍵遷移就是把數(shù)據(jù)由一個(gè)Redis遷移到另一個(gè)Redis(例如從生產(chǎn)環(huán)境遷移到測(cè)試環(huán)境),或者在數(shù)據(jù)庫(kù)之間進(jìn)行遷移
- 鍵遷移有三種方式:move、dump+restore、migrate
- 下面是三種方式的比較,建議使用migrate:
二、move
move key db
- 功能:將參數(shù)所指的key從當(dāng)前源數(shù)據(jù)庫(kù)遷移到指定的數(shù)據(jù)庫(kù)中
- 這個(gè)命令是在單個(gè)Redis內(nèi)部進(jìn)行是用戶具有遷移
這個(gè)命令在實(shí)際生產(chǎn)環(huán)境中不建議使用
演示案例
0號(hào)數(shù)據(jù)庫(kù)有一個(gè)hello字符串鍵,1號(hào)數(shù)據(jù)庫(kù)為空,現(xiàn)在我們將0號(hào)數(shù)據(jù)庫(kù)的hello字符串鍵遷移到1號(hào)數(shù)據(jù)庫(kù)中
三、dump+restore
dump key restore key ttl value
功能:這兩個(gè)命令的組合可以實(shí)現(xiàn)在不同的Redis數(shù)據(jù)庫(kù)實(shí)例之間進(jìn)行數(shù)據(jù)遷移
整個(gè)遷移過(guò)程分為兩步:
- 源Redis端執(zhí)行dump命令,將key鍵值序列化,格式采用的是RDB格式
- 目標(biāo)Redis端執(zhí)行restore命令,將上面序列化的值進(jìn)行復(fù)原,其中ttl參數(shù)代表過(guò)期時(shí)間(如果為0代表沒(méi)有過(guò)期時(shí)間)
有兩點(diǎn)需要注意:
- 第一,整個(gè)遷移過(guò)程并非原子性的,而是通過(guò)客戶端分步完成的
- 第二,遷移過(guò)程是使用兩個(gè)客戶端連接傳輸,不是在源Redis和目標(biāo)Redis之間進(jìn)行傳輸
演示案例
在源Redis上執(zhí)行dum:
在目標(biāo)Redis上執(zhí)行restore:
上面2步對(duì)應(yīng)的偽代碼如下:
四、migrate
- migrate命令也是用于在Redis實(shí)例間進(jìn)行數(shù)據(jù)遷移的
- 實(shí)際上migrate命令就是將dump、restore、del三個(gè)命令進(jìn)行組合,從而簡(jiǎn)化了操作流程
- migrate命令具有原子性,而且從Redis3.0.6版本以后已經(jīng)支持遷移多個(gè)鍵的功能,有效地提高了遷移效率,migrate在水平擴(kuò)容(后面文章有介紹)中起到重要作用
遷移過(guò)程如下
整個(gè)過(guò)程如下圖所示:
實(shí)現(xiàn)過(guò)程和dump+restore基本類似,但是有3點(diǎn)不太相同:
- 第一,整個(gè)過(guò)程是原子執(zhí)行的,不需要在多個(gè)Redis實(shí)例上開(kāi)啟 客戶端的,只需要在源Redis上執(zhí)行migrate命令即可
- 第二,migrate命令的數(shù)據(jù)傳輸直接在源Redis和目標(biāo)Redis上完成的
- 第三,目標(biāo)Redis完成restore后會(huì)發(fā)送OK給源Redis,源Redis接收后會(huì)根據(jù)migrate對(duì)應(yīng)的選項(xiàng)來(lái)決定是否在源Redis上刪除對(duì)應(yīng)的鍵
命令格式
migrate host port key|"" destination-db timeout [copy] [replace] [keys key [key
參數(shù)介紹如下:
- host:目標(biāo)Redis的IP地址
- port:目標(biāo)Redis的端口
- key|"":在Redis3.0.6版本之前,migrate只支持遷移一個(gè)鍵,所以此處是要遷移的鍵,但Redis3.0.6版本之后支持遷移多個(gè)鍵,如果當(dāng)前需要遷移多個(gè)鍵,此處為空字符串""
- destination-db:目標(biāo)Redis的數(shù)據(jù)庫(kù)索引,例如要遷移到0號(hào)數(shù)據(jù)庫(kù),這里就寫0。
- timeout:遷移的超時(shí)時(shí)間(單位為毫秒)
- [copy]:如果添加此選項(xiàng),遷移后并不刪除源鍵
- [replace]:如果添加此選項(xiàng),migrate不管目標(biāo)Redis是否存在該鍵都會(huì)正常遷移進(jìn)行數(shù)據(jù)覆蓋
- [keys key[key...]]:遷移多個(gè)鍵,例如要遷移key1、key2、key3,此處填 寫“keys key1 key2 key3”
演示案例(單個(gè)鍵遷移)
例如我們開(kāi)啟兩個(gè)redis服務(wù)端實(shí)例,一個(gè)為127.0.0.1:6379,一個(gè)為127.0.0.1:6380
情況1:源(127.0.0.1:6379)Redis有鍵hello,目標(biāo)(127.0.0.1:6380)Redis沒(méi)有,遷移成功
migrate 127.0.0.1 6380 hello 0 1000
情況2:源Redis和目標(biāo)Redis都有鍵hello:
- 如果migrate命令沒(méi)有加replace選項(xiàng)會(huì)收到錯(cuò)誤提示(下面演示這種)
- 如果加了replace會(huì)返回OK表明遷移成功(讀者自己演示)
migrate 127.0.0.1 6380 hello 0 1000
情況3:源Redis沒(méi)有鍵hello,此種情況會(huì)收到nokey的提示
migrate 127.0.0.1 6380 hello 0 1000
演示案例(多個(gè)鍵遷移)
源Redis批量添加多個(gè)鍵
mset key1 value1 key2 value2 key3 value3
源Redis執(zhí)行如下命令完成多個(gè)鍵的遷移
migrate 127.0.0.1 6380 "" 0 5000 keys key1 key2 key3
到此這篇關(guān)于Redis鍵遷移(move、dump、restore、migrate)的三種實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Redis鍵遷移內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決redis sentinel 頻繁主備切換的問(wèn)題
這篇文章主要介紹了解決redis sentinel 頻繁主備切換的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04利用Redis實(shí)現(xiàn)防止接口重復(fù)提交功能
大家好,本篇文章主要講的是利用Redis實(shí)現(xiàn)防止接口重復(fù)提交功能,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12關(guān)于Redis最常見(jiàn)的十道面試題總結(jié)大全
Redis作為一個(gè)高性能的內(nèi)存數(shù)據(jù)存儲(chǔ)系統(tǒng),具有快速讀寫、持久性、數(shù)據(jù)結(jié)構(gòu)多樣性等特點(diǎn),廣泛應(yīng)用于各種應(yīng)用場(chǎng)景,這篇文章主要給大家介紹了關(guān)于Redis最常見(jiàn)的十道面試題總結(jié)的相關(guān)資料,需要的朋友可以參考下2024-07-07Redis動(dòng)態(tài)熱點(diǎn)數(shù)據(jù)緩存策略設(shè)計(jì)
本文主要介紹了Redis動(dòng)態(tài)熱點(diǎn)數(shù)據(jù)緩存策略設(shè)計(jì),包括熱點(diǎn)數(shù)據(jù)識(shí)別、動(dòng)態(tài)緩存、多級(jí)緩存、預(yù)加載機(jī)制、更新策略以及監(jiān)控告警等,具有一定的參考價(jià)值,感興趣的可以了解一下2025-01-01詳解redis是如何實(shí)現(xiàn)隊(duì)列消息的ack
這篇文章主要介紹了關(guān)于redis是如何實(shí)現(xiàn)隊(duì)列消息的ack的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-04-04