• 周蓬安.blog的博客—强国博客—人民网 2019-05-10
  • 紫光阁中共中央国家机关工作委员会 2019-05-10
  • 感触名家笔下的端午文化吃香粽原来可以这样文艺 2019-05-09
  • 追梦夺冠游行嘲讽詹皇 百万人面前穿订制T恤羞辱他 2019-04-27
  • 《瘟疫传说》:黑死病恐怖 姐弟在绝望中求生 2019-04-10
  • 陕西国防工业职业技术学院百名大学生志愿者敬老院慰问孤寡老人陕西国防工业职业技术学院百名大学生志愿者敬老院慰问-陕西教育新闻 2019-04-08
  • 西藏拉萨:新家园 新生活 2019-04-08
  • 尊重和保障宗教信仰自由的中国实践 2019-04-06
  • 一敬泯恩仇 俄罗斯队主帅这个动作太暖了 2019-03-20
  • 四大名著剧组首次同台忆往事 经典影视剧如何铸就? 2018-12-07
  • “天眼”凝望 探秘宇宙 2018-12-07
  • 0

    Redis MIGRATE 命令

    Posted by 撒得一地 on 2016年7月2日 in Redis教程
    上一篇:
    下一篇:
    国外稳定加速器推荐    Express | Vypr

    语法

    MIGRATE host port key destination-db timeout [COPY] [REPLACE]
    

    描述

    将 key 原子性地从当前实例传送到目标实例的指定数据库上,一旦传送成功, key 保证会出现在目标实例上,而当前实例上的 key 会被删除。

    这个命令是一个原子操作,它在执行的时候会阻塞进行迁移的两个实例,直到以下任意结果发生:迁移成功,迁移失败,等待超时。

    命令的内部实现是这样的:它在当前实例对给定 key 执行 DUMP 命令 ,将它序列化,然后传送到目标实例,目标实例再使用 RESTORE 对数据进行反序列化,并将反序列化所得的数据添加到数据库中;当前实例就像目标实例的客户端那样,只要看到 RESTORE 命令返回 OK ,它就会调用 DEL 删除自己数据库上的 key 。

    timeout 参数以毫秒为格式,指定当前实例和目标实例进行沟通的最大间隔时间。这说明操作并不一定要在 timeout 毫秒内完成,只是说数据传送的时间不能超过这个 timeout 数。

    MIGRATE 命令需要在给定的时间规定内完成 IO 操作。如果在传送数据时发生 IO 错误,或者达到了超时时间,那么命令会停止执行,并返回一个特殊的错误: IOERR 。

    当 IOERR 出现时,有以下两种可能:

    key 可能存在于两个实例
    key 可能只存在于当前实例

    唯一不可能发生的情况就是丢失 key ,因此,如果一个客户端执行 MIGRATE 命令,并且不幸遇上 IOERR 错误,那么这个客户端唯一要做的就是检查自己数据库上的 key 是否已经被正确地删除。

    如果有其他错误发生,那么 MIGRATE 保证 key 只会出现在当前实例中。(当然,目标实例的给定数据库上可能有和 key 同名的键,不过这和 MIGRATE 命令没有关系)。

    可选项:

    COPY :不移除源实例上的 key 。
    REPLACE :替换目标实例上已存在的 key 。

    可用版本:

    >= 2.6.0

    时间复杂度:

    这个命令在源实例上实际执行 DUMP 命令和 DEL 命令,在目标实例执行 RESTORE 命令,查看以上命令的文档可以看到详细的复杂度说明。key 数据在两个实例之间传输的复杂度为 O(N) 。

    返回值:

    迁移成功时返回 OK ,否则返回相应的错误。

    示例

    先启动两个 Redis 实例,一个使用默认的 6379 端口,一个使用 7777 端口。

    $ ./redis-server &
    [1] 3557
    ...
    
    $ ./redis-server --port 7777 &
    [2] 3560
    ...
    

    然后用客户端连上 6379 端口的实例,设置一个键,然后将它迁移到 7777 端口的实例上:

    $ ./redis-cli
    redis 127.0.0.1:6379> flushdb
    OK
    
    redis 127.0.0.1:6379> SET greeting "Hello from 6379 instance"
    OK
    
    redis 127.0.0.1:6379> MIGRATE 127.0.0.1 7777 greeting 0 1000
    OK
    
    # 迁移成功后 key 被删除
    redis 127.0.0.1:6379> EXISTS greeting 
    (integer) 0
    

    使用另一个客户端,查看 7777 端口上的实例:

    $ ./redis-cli -p 7777
    redis 127.0.0.1:7777> GET greeting
    "Hello from 6379 instance"
    

    标签:

    上一篇:

    下一篇:

    相关推荐

    发表评论

    电子邮件地址不会被公开。 必填项已用*标注

    2 + 0 = ?

    网站地图|广东快乐10分开奖直播

    Copyright © 2015-2019 广东快乐10分开奖直播 All rights reserved.
    闽ICP备15015576号-1,版权所有?psz.

  • 周蓬安.blog的博客—强国博客—人民网 2019-05-10
  • 紫光阁中共中央国家机关工作委员会 2019-05-10
  • 感触名家笔下的端午文化吃香粽原来可以这样文艺 2019-05-09
  • 追梦夺冠游行嘲讽詹皇 百万人面前穿订制T恤羞辱他 2019-04-27
  • 《瘟疫传说》:黑死病恐怖 姐弟在绝望中求生 2019-04-10
  • 陕西国防工业职业技术学院百名大学生志愿者敬老院慰问孤寡老人陕西国防工业职业技术学院百名大学生志愿者敬老院慰问-陕西教育新闻 2019-04-08
  • 西藏拉萨:新家园 新生活 2019-04-08
  • 尊重和保障宗教信仰自由的中国实践 2019-04-06
  • 一敬泯恩仇 俄罗斯队主帅这个动作太暖了 2019-03-20
  • 四大名著剧组首次同台忆往事 经典影视剧如何铸就? 2018-12-07
  • “天眼”凝望 探秘宇宙 2018-12-07
  • 辽宁35选7大星走势图 极速飞艇是真的吗 开奖直播 北京赛车单双大小规律 排列5开奖公告 北京赛车pk10的骗局 超级大乐透开奖结果查 3d之家试机号 超级大乐透开奖 重庆幸运农场开奖结果走势图 北京赛车开奖记录删除 北京赛车pk10官方 体彩顶呱刮中奖诀窍指南 体彩p3字谜牛彩网 双色球8+1复式多少钱 体彩p5走势图带连线专业版