[redis] MIGRATE 커맨드

Redis 2016. 1. 15. 01:01


로컬에 3.0.2 (6379포트) 레디스를 실행하고,

2.8.19(6378포트) 레디스를 실행했다. 총 로컬에 2개의 로컬 redis를 실행했다.


MIGRATE 커맨드는 주어진 키를 수신할 레디스 서버로 옮긴다. 

원자적 커맨드라서, 키를 옮길 때는 두 레디스 서버는 블럭된다. 내부적으로 dump, restore, del 커맨드의 조합 명령어이다.



6379 포트의 레디스에 특정 키를 저장하고,

6378 포트의 레디스에 해당 키를 MIGRATE 커맨드로 복사하는 예제이다.


6379 포트의 레디스의 redis-client

127.0.0.1:6379> set b 1

OK

127.0.0.1:6379> MIGRATE 127.0.0.1 6378 b 0 1000

OK

127.0.0.1:6379> set a 10

OK

127.0.0.1:6379> MIGRATE 127.0.0.1 6378 a 0 1000 COPY

OK



6378 포트의 레디스의 redis-client에서 a,b를 확인하면 복사된 것을 확인할 수 있다.

127.0.0.1:6378> get b

"1"

127.0.0.1:6378> get a

"10"

127.0.0.1:6378> TTL a

(integer) -1




6379 포트의 레디스의 redis-client(3.0.2)에서 하위 버전의 redis(2.8.19)로는 MIGRATE.. COPY는 동작되지만, REPLACE는 동작되지 않는다.

127.0.0.1:6379> MIGRATE 127.0.0.1 6378 a 0 1000 REPLACE

(error) ERR Target instance replied with error: ERR wrong number of arguments for 'restore' command



그리고, 목적 DB에 동일 키가 있으면 에러가 발생한다.

127.0.0.1:6379> MIGRATE 127.0.0.1 6378 a 0 1000 COPY

(error) ERR Target instance replied with error: ERR Target key name is busy.


원본 DB에 키가 없어도 에러가 발생한다.

127.0.0.1:6379> MIGRATE 127.0.0.1 6378 b 0 1000

NOKEY











Posted by '김용환'
,