非常教程

Redis参考手册

键 | Keys

migrate

MIGRATE host port key|"" destination-db timeout [COPY] [REPLACE] [KEYS key [key ...]]

自2.6.0起可用。

时间复杂度:该命令实际上在源实例中执行 DUMP + DEL,并在目标实例中执行 RESTORE。查看这些命令的页面以了解时间复杂性。此外还执行两个实例之间的O(N)数据传输。

将来自源 Redis 实例的密钥以原子方式传输到目标 Redis 实例。成功时,密钥从原始实例中删除,并保证存在于目标实例中。

该命令是原子性的,并在传输密钥所需的时间内阻塞两个实例,在任何给定时间,密钥似乎都会存在于给定实例中或其他实例中,除非发生超时错误。在3.2和更高版本中,通过传递空字符串(“”)作为键并添加 KEYS 子句,可以在 MIGRATE 的单个调用中对多个键进行流水线处理。

该命令在内部使用 DUMP 生成键值的序列化版本,并使用RESTORE 来合成目标实例中的键。源实例充当目标实例的客户端。如果目标实例向 RESTORE 命令返回 OK,则源实例将使用DEL删除该密钥。

超时指定与目标实例通信的任何时刻的最大空闲时间,以毫秒为单位。这意味着操作不需要在指定的毫秒数内完成,但是传输应该在没有阻塞超过指定的毫秒数的情况下进行。

MIGRATE 需要执行 I / O 操作并遵守指定的超时。当传输过程中发生 I / O 错误或达到超时时,操作中止,并IOERR返回特殊错误。发生这种情况时,以下两种情况是可能的:

  • 密钥可能在两个实例上。
  • 密钥可能只在源实例中。

发生超时时密钥不可能丢失,但如果发生超时错误,客户端调用MIGRATE 应检查密钥是否存在于目标实例中,并相应采取相应措施。

当返回任何其他错误时(从开始ERR) MIGRATE 保证密钥仍然仅存在于初始实例中(除非同名的密钥已经存在于目标实例中)。

如果没有在源实例中迁移的密钥NOKEY返回。因为在正常情况下丢失的密钥是可能的,例如从失效到NOKEY不是错误。

使用一个命令调用迁移多个键

从Redis 3.0.6开始 MIGRATE 支持一种新的批量迁移模式,该模式使用流水线技术来迁移实例间的多个密钥,而不会产生往返时间延迟以及使用单个 MIGRATE 调用移动每个密钥时存在的其他开销。

为了启用此表单,使用了 KEYS 选项,并将常规参数设置为空字符串。实际的键名将在 KEYS 参数本身之后提供,如下例所示:

当使用这种形式NOKEY时,只有在实例中没有任何键时才返回状态码,否则即使只有一个键存在,命令也会执行。

  • COPY - 不要从本地实例中删除密钥。
  • REPLACE - 替换远程实例上的现有密钥。
  • keys - 如果键参数是一个空字符串,则该命令将迁移 KEYS 选项后面的所有键(有关详细信息,请参阅上面的部分)。

COPY并且REPLACE仅在3.0及以上版本中可用。KEYS可以从Redis 3.0.6开始使用。

返回值

简单字符串回复:该命令在成功时返回OK,或者NOKEY如果在源实例中未找到任何密钥。

Redis

Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。 它通常被称为数据结构服务器,因为值( value )可以是 字符串( String ), 哈希(Map),列表(list),集合( sets ) 和 有序集合( sorted sets )等类型。

主页 https://redis.io/
源码 https://github.com/antirez/redis
发布版本 4.0.2

Redis目录

1.集合 | Cluster
2.连接 | Connection
3.Geo
4.Hashes
5.HyperLogLog
6.键 | Keys
7.列表 | Lists
8.Pub/Sub
9.脚本 | Scripting
10.服务器 | Server
11.设定 | Sets
12.排序集 | Sorted Sets
13.字符串 | Strings
14.事务 | Transactions
15.Redis Dump 命令
16.Redis DEL 命令
17.Redis 键(key)
18.Redis 命令
19.Redis 配置
20.Redis 简介
21.Redis RANDOMKEY 命令
22.Redis TTL 命令
23.Redis Pttl 命令
24.Redis PERSIST 命令
25.Redis Move 命令
26.Redis PEXPIREAT 命令
27.Redis Keys 命令
28.Redis Expireat 命令
29.Redis Expire 命令
30.Redis EXISTS 命令
31.Redis Mget 命令
32.Redis Getbit 命令
33.Redis Getset 命令
34.Redis Getrange 命令
35.Redis Get 命令
36.Redis SET 命令
37.Redis 字符串(String)
38.Redis Type 命令
39.Redis Renamenx 命令
40.Redis Rename 命令
41.Redis Incrby 命令
42.Redis Incr 命令
43.Redis Psetex 命令
44.Redis Msetnx 命令
45.Redis Mset 命令
46.Redis Strlen 命令
47.Redis Setrange 命令
48.Redis Setnx 命令
49.Redis Setex 命令
50.Redis Setbit 命令
51.Redis Hincrby 命令
52.Redis Hgetall 命令
53.Redis Hget 命令
54.Redis Hexists 命令
55.Redis Hdel 命令
56.Redis 哈希(Hash)
57.Redis Append 命令
58.Redis Decrby 命令
59.Redis Decr 命令
60.Redis Incrbyfloat 命令
61.Redis Blpop 命令
62.Redis 列表(List)
63.Redis Hvals 命令
64.Redis Hsetnx 命令
65.Redis Hset 命令
66.Redis Hmset 命令
67.Redis Hmget 命令
68.Redis Hlen 命令
69.Redis Hkeys 命令
70.Redis Hincrbyfloat 命令
71.Redis Lrem 命令
72.Redis Lrange 命令
73.Redis Lpushx 命令
74.Redis Lpush 命令
75.Redis Lpop 命令
76.Redis Llen 命令
77.Redis Linsert 命令
78.Redis Lindex 命令
79.Redis Brpoplpush 命令
80.Redis Brpop 命令
81.Redis Sdiff 命令
82.Redis Scard 命令
83.Redis Sadd 命令
84.Redis 集合(Set)
85.Redis Rpushx 命令
86.Redis Rpush 命令
87.Redis Rpoplpush 命令
88.Redis Rpop 命令
89.Redis Ltrim 命令
90.Redis Lset 命令
91.Redis Sunion 命令
92.Redis Srem 命令
93.Redis Srandmember 命令
94.Redis Spop 命令
95.Redis Smove 命令
96.Redis Smembers 命令
97.Redis Sismember 命令
98.Redis Sinterstore 命令
99.Redis Sinter 命令
100.Redis Sdiffstore 命令