Redis:15---鍵遷移(move、dump、restore、migrate)

  • 鍵遷移概述:

    • 鍵遷移就是把數據由一個Redis遷移到另一個Redis(例如從生產環境遷移到測試環境),或者在數據庫之間進行遷移

    • 鍵遷移有三種方式:move、dump+restore、migrate

    • 下面是三種方式的比較,建議使用migrate:

一、move

move key db
  • 功能:將參數所指的key從當前源數據庫遷移到指定的數據庫中

  • 這個命令是在單個Redis內部進行是用戶具有遷移

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

演示案例

  • 0號數據庫有一個hello字符串鍵,1號數據庫為空,現在我們將0號數據庫的hello字符串鍵遷移到1號數據庫中

二、dump+restore

dump key
restore key ttl value
  • 功能:這兩個命令的組合可以實現在不同的Redis數據庫實例之間進行數據遷移

  • 整個遷移過程分為兩步:

    • 源Redis端執行dump命令,將key鍵值序列化,格式采用的是RDB格式

    • 目標Redis端執行restore命令,將上面序列化的值進行復原,其中ttl參數代表過期時間(如果為0代表沒有過期時間)

備注說明

  • 有兩點需要注意:

    • 第一,整個遷移過程并非原子性的,而是通過客戶端分步完成的

    • 第二,遷移過程是使用兩個客戶端連接傳輸,不是在源Redis和目標Redis之間進行傳輸

演示案例

  • 在源Redis上執行dum:

  • 在目標Redis上執行restore:

三、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”

演示案例①(單個鍵遷移)

  • 例如我們開啟兩個redis服務端實例,一個為127.0.0.1:6379,一個為127.0.0.1:6380

  • 情況1:源(127.0.0.1:6379)Redis有鍵hello,目標(127.0.0.1:6380)Redis沒有,遷移成功

migrate 127.0.0.1 6380 hello 0 1000

  • 情況2:源Redis和目標Redis都有鍵hello:

    • 如果migrate命令沒有加replace選項會收到錯誤提示(下面演示這種)

    • 如果加了replace會返回OK表明遷移成功(讀者自己演示)

migrate 127.0.0.1 6380 hello 0 1000

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

migrate 127.0.0.1 6380 hello 0 1000

演示案例②(多個鍵遷移)

  • 源Redis批量添加多個鍵

mset key1 value1 key2 value2 key3 value3

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

migrate 127.0.0.1 6380 "" 0 5000 keys key1 key2 key3

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444318.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444318.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444318.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis:18---常用功能之(Lua腳本)

為了保證多條命令組合的原子性,Redis提供了簡單的事務功能以及集成Lua腳本來解決這個問題,本文介紹Lua,事務已經在前一篇文章介紹過了一、Lua概述 Lua語言是在1993年由巴西一個大學研究小組發明,其設計目標是作為嵌入式程序移植到其他應用程序,它是由C語言實現的,雖然簡單…

leetcode414. 第三大的數

給定一個非空數組,返回此數組中第三大的數。如果不存在,則返回數組中最大的數。要求算法時間復雜度必須是O(n)。 示例 1: 輸入: [3, 2, 1] 輸出: 1 解釋: 第三大的數是 1. 示例 2: 輸入: [1, 2] 輸出: 2 解釋: 第三大的數不存在, 所以返回最大的數…

Redis:17---常用功能之(事務)

為了保證多條命令組合的原子性,Redis提供了簡單的事務功能以及集成Lua腳本來解決這個問題,本文介紹Redis事務,Lua在下一篇文章介紹一、事務概述簡單地說,事務表示一組動作,要么全部執行,要么全部不執行。例…

leetcode448. 找到所有數組中消失的數字 天秀記錄法

給定一個范圍在 1 ≤ a[i] ≤ n ( n 數組大小 ) 的 整型數組,數組中的元素一些出現了兩次,另一些只出現一次。 找到所有在 [1, n] 范圍之間沒有出現在數組中的數字。 您能在不使用額外空間且時間復雜度為O(n)的情況下完成這個任務嗎? 你可以假定返回…

Redis:12---有序集合對象

一、有序集合對象概述它保留了集合不能有重復成員的特性, 但不同的是,有序集合中的元素可以排序。但是它和列表使用索引下標作為排序依據不同的是,它給每個元素設置一個分數(score)作為排序的依據如下圖所示&#xff0…

Redis:14---常用功能之(Pipeline)

一、Pipeline概述 Redis客戶端執行一條命令分為如下四個過程:1.發送命令2.命令排隊3.命令執行4.返回結果其中1+4稱為Round Trip Time(RTT,往返時間)Pipeline概述 Redis提供了批量操作命令(例如mget、mset等),有效地節約RTT。但大部分命令是不支持批量操作的,例如要執行…

leetcode170. 兩數之和 III - 數據結構設計

設計并實現一個 TwoSum 的類,使該類需要支持 add 和 find 的操作。 add 操作 - 對內部數據結構增加一個數。 find 操作 - 尋找內部數據結構中是否存在一對整數,使得兩數之和與給定的數相等。 示例 1: add(1); add(3); add(5); find(4) -> true fi…

Redis:11---Set對象

集合類型 (Set) 是一個無序并唯一的鍵值集合。它的存儲順序不會按照插入的先后順序進行存儲。 集合類型和列表類型的區別如下: 列表可以存儲重復元素,集合只能存儲非重復元素;列表是按照元素的先后順序存儲元素的,而集合則是無序方式存儲元素的。一、集合對象概述 特點:集…

Oracle中計算兩個時間的時間差:

計算時間差是oracledata數據類型的一個常見問題。oracle支持日期計算,你可以創建諸如“日期1-日期2”這樣的表達式來計算這兩個日期之間的時間差。一旦你發現了時間差異,你可以使用簡單的技巧來以天、小時、分鐘或者秒為單位來計算時間差。為…

Redis:13--常用功能之redis-cli redis-server等命令

Redis提供了redis-cli、redis-server、redis-benchmark等Shell工具。它們 雖然比較簡單,但是麻雀雖小五臟俱全,有時可以很巧妙地解決一些問題一、redis-cli在前面數據庫連接的時候已經redis-cli的-h、-p參數,除了這些參數,還有很多…

Redis:16---常用功能之(慢查詢日志)

一、慢查詢日志介紹 許多存儲系統(例如MySQL)提供慢查詢日志幫助開發和運維人員定位系統存在的慢操作。所謂慢查詢日志就是系統在命令執行前后計算每條命令的執行時間,當超過預設閥值,就將這條命令的相關信息記錄下來,Redis也提供了類似的功能Redis的慢查詢日志功能用于記…

leetcode256. 粉刷房子

假如有一排房子,共 n 個,每個房子可以被粉刷成紅色、藍色或者綠色這三種顏色中的一種,你需要粉刷所有的房子并且使其相鄰的兩個房子顏色不能相同。 當然,因為市場上不同顏色油漆的價格不同,所以房子粉刷成不同顏色的花…

Redis:21---客戶端相關配置篇

一、客戶端相關配置①客戶端的限制maxclientsRedis提供了maxclients參數來限制最大客戶端連接數,一旦連接數超過 maxclients,新的連接將被拒絕maxclients默認值是10000可以通過info clients來查詢當前Redis的連接數:可以通過config set maxcl…

Redis:23---info命令總結

info命令的格式有3種:info:部分Redis系統狀態統計信息info all:全部Redis系統狀態統計信息,一次性打印下面所有p的內容info p:某一塊的系統狀態統計信息。info命令所有的p如下所示模塊名模塊含義 Server服務器信息Clie…

Redis:22---客戶端API:client、monitor)

一、client listclient list命令能列出與Redis服務端相連的所有客戶端連接信息。例如下面代碼是在一個Redis實例上執行client list的結果,其中每一行代表一個客戶端信息:下面將選擇幾個重要的屬性進行說明,其余通過表格的形式進行展示①標識&…

leetcode175. 組合兩個表(SQL)

表1: Person ---------------------- | 列名 | 類型 | ---------------------- | PersonId | int | | FirstName | varchar | | LastName | varchar | ---------------------- PersonId 是上表主鍵 表2: Address ---------------------- | 列名 …

Redis:20---常用功能之(發布與訂閱)

一、發布與訂閱概述Redis提供了基于“發布/訂閱”模式的消息機制,此種模式下,消息發布者和訂閱者不進行直接通信,發布者客戶端向指定的頻道(channel)發布消息,訂閱該頻道的每個客戶端都可以收到該消息。 下…

Redis:19---常用功能之(HyperLogLog)

一、HyperLogLog概述HyperLogLog并不是一種新的數據結構(實際類型為字符串類型),而是一種基數算法,通過HyperLogLog可以利用極小的內存空間完成獨立總數的統計,數據集可以是IP、Email、ID等HyperLogLog提供了3個命令&a…

計算時間差的Oracle函數

Oracle函數可以實現諸多的功能,下面就介紹使用Oracle函數計算時間差的實現方法,如果您對Oracle函數方面感興趣的話,不妨一看。 兩個Date類型字段:START_DATE,END_DATE,計算這兩個日期的時間差(分…

leetcode181. 超過經理收入的員工(SQL)

Employee 表包含所有員工,他們的經理也屬于員工。每個員工都有一個 Id,此外還有一列對應員工的經理的 Id。 ------------------------------ | Id | Name | Salary | ManagerId | ------------------------------ | 1 | Joe | 70000 | 3 |…