Redis键迁移
Redis键迁移
在使用Redis的过程中,很多时候我们会遇到需要进行键迁移的问题,需要将指定Redis中的指定数据迁移到其他Redis当中,键迁移有三种方法,我们来进行一一介绍。
一、move
move key db
move命令由于在Redis内部进行数据迁移,Redis内部可以有多个数据库,彼此在数据上相互隔离,move key db
就是把指定的键从源数据库移动到目标数据库当中,但是不建议在生产环境中使用。
二、dump + restore
dump key
restore key ttl value
1.在源Redis上,dump命令会将键值序列化,格式采用RDB格式。
2.在目标Redis上,restore命令将上面序列化的值进行复原,其中ttl参数表示过期时间,ttl=0代表永不过期。
需要注意的是:
一、整个迁移过程并非原子性的,而是通过客户端分部完成的。
二、迁移过程是开启了两个客户端连接,所以dump得结果不是在源Redis和目标Redis之间进行传输。
Redis-source上执行的操作
127.0.0.1:6379> set key1 Federico
OK
127.0.0.1:6379> dump key1
"\x00\bFederico\x06\x00L\x88\xd4\xb3U/Y\xae"
在Redis-source上设置一个新的键值,将此键值进行序列化。
Redis-target上执行的操作
127.0.0.1:6380> get key1
(nil)
127.0.0.1:6380> restore key1 0 "\x00\bFederico\x06\x00L\x88\xd4\xb3U/Y\xae"
OK
127.0.0.1:6380> get key1
"Federico"
在Redis-target上查看当前可以不存在后,将序列化后的key进行复原
三、migrate
migrate
用于在Redis实例间进行数据迁移,实际上migrate
命令是将dump
、restore
、del
三个命令进行组合,从而简化了操作流程。migrate
命令具有原子性,从Redis 3.0.6版本后已经支持迁移多个键的功能。migrate
命令的数据传输直接在源Redis和目标Redis上完成,目标Redis完成restore后会发送OK给源Redis。
migrate
参数:
- host:目标Redis的IP地址
- port:目标Redis的端口
- key|"":Redis 3.0.6 后如果需要迁移多个键,此处为空字符串""
- destination-db:目标Redis的数据库索引
- timeout:迁移的超时时间(单位为毫秒)
- copy:如果添加此选项后,迁移后不删除源键。
- replace:如果添加此选项
migrate
不管目标Redis是否存在该键都会正常迁移进行数据覆盖 - keys:如果要删除多个建,填写
keys key1 key2 key3
Redis-source
127.0.0.1:6379> set key1 Federico
OK
127.0.0.1:6379> set key2 sunshine
OK
127.0.0.1:6379> keys *
1) "key1"
2) "key2"
127.0.0.1:6379> MIGRATE 127.0.0.1 6380 key1 0 1000
OK
127.0.0.1:6379> keys *
1) "key2"
Redis-target
127.0.0.1:6380> keys *
1) "key1"
127.0.0.1:6380> GET key1
"Federico"
从源Redis上看到,我们设置了两个键,执行默认参数迁移后只有了一个键。而在目标Redis上已经成功迁移过去了这个键。如果想同时保留源Redis上的数据,可以加上我们上面提到过的参数。
Redis-source
127.0.0.1:6379> keys *
1) "key2"
127.0.0.1:6379> MIGRATE 127.0.0.1 6380 key2 0 1000 copy
OK
127.0.0.1:6379> keys *
1) "key2"
Redis-traget
127.0.0.1:6380> keys *
1) "key1"
2) "key2"
127.0.0.1:6380> get key2
"sunshine"
这样我们就将Redis键迁移的基本操作进行完了。
move、dump+restore、migrate三个命令的比较
命令 | 作用域 | 原子性 | 支持多个键 |
---|---|---|---|
move | Redis实例内部 | 是 | 否 |
dump+restore | Redis实例之间 | 否 | 是 |
migrate | Redis实例之间 | 是 | 是 |
Redis键迁移的更多相关文章
- Redis系列五:redis键管理和redis数据库管理
一.redis键管理 1 键重命名 rename oldKey newkey //格式rename oldKey newKey //若oldKey之前存在则被覆盖set name james :set ...
- Python进行Redis数据迁移
Python进行Redis数据迁移 由于开发时的误操作,导致redis数据损坏,所以需要进行redis的数据迁移,网上大佬的教程基本都是需要下载附加工具,亦或是需要一些复杂的操作,个人觉得麻烦还不如写 ...
- redis键命令
1.ping命令用于检测redis是否启动 成功返回pong表示链接成功 2.在远程redis服务上执行命令 Redis-cli -h host -p port -a password 如果是连接本机 ...
- Redis 键(key)相关的命令及其它命令的查看地址
Redis 键(key) Redis 键命令用于管理 redis 的键. 语法 Redis 键命令的基本语法如下: redis 127.0.0.1:6379> COMMAND KEY_NAME ...
- Redis 键(key)
Redis 键命令用于管理 redis 的键. 语法 Redis 键命令的基本语法如下: redis 127.0.0.1:6379> COMMAND KEY_NAME 实例 redis 12 ...
- Redis数据迁移方案
场景 Redis实例A ---> Redis实例B,整库全量迁移 方案一: mac环境 brew install npm npm install redis-dump -g 针对RedisA: ...
- redis-dump实现redis库迁移
最近公司有切换redis库的需求,找了个简单的redis迁移方法,不过也有缺点.就是对于实时性要求很高的redis库迁移无法做到数据的实时同步.不过对于简单的redis库备份和迁移还是可以的,各位看官 ...
- springboot使用Redis,监听Redis键过期的事件设置与使用代码
我使用的是Windows下的Redis服务,所以一下Redis设置都是在Windows平台进行. 1.修改Redis配置文件 1.1:Windows下的Redis存在两个配置文件 修改带有servic ...
- redis键值操作
1.1. redis键值操作 1.1.1. keys patten 查询相应的key 可以精确的查,也可以模糊的查 1.1.1.1. 通配符:* ? [] 在redis里,模糊查询key的时候有3个通 ...
随机推荐
- EasyUI 删除
<script type="text/javascript"> <!-- js --> /*================================ ...
- 好用的模板引擎NVelocity
CastleNVelocity-1.1.1,使用方法: 把dll放到项目中,添加引用,修改配置的文件夹以及数据模型,最后在逻辑代码中调用即可. 封装到CommonHelper.cs using Sys ...
- Too Rich(贪心+DFS)
Too Rich http://acm.hdu.edu.cn/showproblem.php?pid=5527 Time Limit: 6000/3000 MS (Java/Others) Me ...
- SSH框架分模块开发
------------------siwuxie095 SSH 框架分模块开发 1.在 Spring 核心配置文件中配置多个内容,容易造成 配置混乱,不利于维护 「分模块开发主要针对 Spring ...
- git协议
常用三种协议:ssh, git, http ssh协议: 使用ssh传输,安全,可授权,需要用ssh登录,一般使用添加秘钥的方式.搭建方便. git协议: 使用git-daemon监听9418端口,配 ...
- PAT L1-009 N个数求和(模拟分数加法)
本题的要求很简单,就是求N个数字的和.麻烦的是,这些数字是以有理数“分子/分母”的形式给出的,你输出的和也必须是有理数的形式. 输入格式: 输入第一行给出一个正整数N(<=100).随后一行按格 ...
- kwic--Java统计单词个数并按照顺序输出
2016-07-02(随笔写作时间) 写了好久的程序了为了避免以后用到.......... 是一个统计单词个数,并按照个数从大到小输出的.输入文件名OK 了 单词是按照首字母排序的,,,里面用到映射等 ...
- handler------post传送方式
package com.qianfeng.gp08_day26_hanlder2; import android.os.Bundle; import android.os.Handler; impor ...
- Java多线程超详细总结
目录(?)[-] 一扩展javalangThread类 二实现javalangRunnable接口 三Thread和Runnable的区别 四线程状态转换 五线程调度 六常用函数说明 使用方式 为什么 ...
- .NET获得上传图片宽高
代码: //图片大小限制--------------------------- System.Drawing.Image txtStoryimage = System.Drawing.Image.Fr ...