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命令是将dumprestoredel三个命令进行组合,从而简化了操作流程。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实例之间 | 是 | 是 |

NoSQL - KVstore -Redis的更多相关文章

  1. 【NoSql】Redis

    [NoSql]Redis 一. 文档 1. 官网 2. Windows 安装包 3. C# Driver a. ServiceStack.Redis 最新版本是收费的 b. StackExchange ...

  2. NoSQL之Redis高级实用命令详解--安全和主从复制

    Android IOS JavaScript HTML5 CSS jQuery Python PHP NodeJS Java Spring MySQL MongoDB Redis NOSQL Vim ...

  3. NoSQL:redis缓存数据库

    一 Redis介绍 Redis和Memcached类似,也属于key-value nosql 数据库 Redis官网redis.io, 当前最新稳定版4.0.1 和Memcached类似,它支持存储的 ...

  4. No-sql之redis常用命令

    转自:http://blog.csdn.net/nicewuranran/article/details/51793760 No-SQL之Redis 介绍 Redis是一种基于内存存储的key-val ...

  5. NoSQL之Redis学习笔记

    一.NoSQL与Redis 1.什么是NoSQL? NoSQL=Not Only SQL ,泛指非关系型数据库.随着互联网的兴起,传统的关系型数据库已经暴露了很多问题,NoSQL数据库的产生就是为了解 ...

  6. 【一个idea】YesSql,一种在经典nosql数据库redis上实现SQL引擎的方案(我就要开历史的倒车)

    公众号链接 最高级的红酒,一定要掺上雪碧才好喝. 基于这样的品味,我设计出了一套在经典nosql数据库redis上实现SQL引擎的方法.既然redis号称nosql,而我偏要把SQL加到redis上, ...

  7. NoSQL 之Redis的5大数据类型

    NoSQL 之Redis的5大数据类型 Redis的五大数据类型也称五大数据对象:了解过6大数据结构,Redis并没有直接使用这些结构来实现键值对数据库,而是使用这些结构构建了一个对象系统redisO ...

  8. NoSQL 之 Redis配置与优化

    NoSQL 之 Redis配置与优化 1.关系数据库与非关系型数据库概述 2.关系数据库与非关系型数据库区别 3.非关系型数据库产生背景 4.Redis简介 5.Redis安装部署 6.Redis 命 ...

  9. NoSQL之Redis配置与优化

    NoSQL之Redis配置与优化 目录 NoSQL之Redis配置与优化 一.关系数据库和非关系数据库 1. 关系型数据库 2. 非关系型数据库 3. 非关系型数据库产生背景 4. 关系型数据库和非关 ...

随机推荐

  1. Spark Mllib里如何生成KMeans的训练样本数据、生成线性回归的训练样本数据、生成逻辑回归的训练样本数据和其他数据生成

    不多说,直接上干货! 具体,见 Spark Mllib机器学习(算法.源码及实战详解)的第2章 Spark数据操作

  2. Properties IO持久化

    Properties IO持久化 Properties类表示一组持久的属性. Properties可以保存到流中或从流中加载. 属性列表中的每个键及其对应的值都是一个字符串. 方法: String g ...

  3. 用CSS控制图片大小显示的方法

    图片自动适应大小是一个非常常用的功能,在进行制作的时候为了防止图片撑开容器而对图片的尺寸进行必要的控制,我们可不可以用CSS控制图片使它自适应大小呢? 可以通过按比例缩小或者放大到某尺寸(自己指定), ...

  4. Java的compare比较

    package com.jckb; public class Name implements Comparable<Name>{ private String firstName; pri ...

  5. Nginx 安装(CentOS )非yum安装

    Nginx 安装(CentOS ) 一.安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-d ...

  6. 用weex create 创建app项目 报 ERROR in index.web.js from UglifyJs 错误!

    用weex create创建一个APP项目,安装依赖后运行报 这个是package.json index.web.js 在dist目录下是build时生成的. 上面的答案没有给大家细节,不好意思致歉下 ...

  7. css禁止文字被选中

    有时候,为了让用户有更好的体验,需要禁用掉文本选中功能 比如:使用a标签模拟按钮,如果不禁用掉文本选中功能,那么双击时会选中文字,用起来很不爽. 多数情况下,只需要使用CSS样式就可以实现这个功能啦: ...

  8. SpringBoot集成mybatis和mybatis generator

    利用搭建的基本的spring boot框架,集成 mybatis + generator 1.设置 maven 的相关配置: File  - setting - maven 设置 Maven home ...

  9. HDU3577 线段树(区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3577 ,普通的线段树区间更新题目,较简单. 相当于一个区间覆盖问题,有一点要注意的就是叶子节点是一个长 ...

  10. httpd2.4.6三种工作模式(如何配置),防止占用内存暴增的策略

    之前偷懒默认用yum安装了httpd.后来发现服务器内存暴增,一度达到75% 打开一看,好嘛后台休眠进程全是httpd. 重启之后再度访问发现内存还是稳步增长. [root@iz2ze3ayxs2yp ...