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.mzph.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 |…