redis迁移数据

清理memcached缓存:首先telnet连接memcache,然后“flush_all”清除缓存,最后quit退出。

redis数据迁移:将一个redis的数据迁移到另一个redis中,redis提供了三种方式来满足数据迁移的需求,分别是move、dump+restore、migrate。

1.1.1 move key db

Redis支持多数据库,多数据库之间彼此在数据上是隔离的。move key db就是把指定的键从源数据库迁移到目标数据库中。由于多数据库在生产环境中不建议使用,所以此命令很少使用到。

1.1.2 dump+restore

命令: 源REDIS: dump key

     目标redis:restore keyttl value 其中ttl代表过期时间,单位:毫秒。0代表不过期

实现原理:

dump+restore可以实现redis不同实例之间的数据迁移。

(1)      在源Redis上,dump命令会将键值序列化,格式采用RDB格式。

(2)      在目标Redis上,restore命令会将上面序列化的值进行复原,其中ttl代表过期时间,如果ttl为0,则表示没有过期时间

 注意事项:

(1)      整个迁移过程并非原子性的,而是通过客户端分布完成的。

(2)      迁移过程是开启了两个实例的redis客户端,将源REDIS序列化后的值放到目标REDIS实例客户端进行操作,并不是在源Redis和目标Redis之间进行传输

1.1.3 migrate

migrate命令具有原子性,只需要在源redis实例上执行migrate命令即可。Migrate的命令传输直接在源redis和目标redis实例之间进行。

命令:migrate host port key |’’ destination-db timeout [copy] [replace][keyskey[key…]]

选项:host:目标redis的IP地址

     Port:目标redis的端口号

     key|’’’’:在Redis3.06版本之前,migrate只支持迁移一个键,所以此处是要迁移的键。

 Redis3.06版本之后支持迁移多个键,如果迁移多个键则此处填写空字符串’’’’

     destination-db:目标数据库索引,例如要迁移到0号数据库,这里就写0

     timeout:迁移的超时时间(单位毫秒)

     [copy]:添加此选项后迁移后并不删除源键

     [replace]:添加此选项后,不管目标redis是否存在该键,都会正常迁移进行数据覆盖

      [keys key[key…]]:迁移多个键,例如要迁移k1k2 k3,此处填写keys key1 key2 key3,当所有的key在源实例上不存在时返回nokey

例如:migrate 10.3.34.101 6378  010000 copy keys mi aa

将mi aa两个元素迁移到10.3.34.101 6378实例的0号数据库上,源实例mi aa两个键仍然保留。

在java程序中,可以根据*获取旧redis源的所有匹配的key,有值的逐个set到新redis中。

猜你喜欢

转载自1181731633.iteye.com/blog/2406932