migrate
MIGRATE
Redis 開発者教育の申込
|
Redis 定期点検/技術サポートRedis Technical Support |
Redis エンタープライズサーバーRedis Enterprise Server |
|---|
Data を別の Redis Server へ移す
使い方は migrate host port key destination-db です。
key と data を指定した Redis Server(instance)へ move します。
指定した Server に該当 key がすでにあればエラーを出し、移しません。
Example
| コマンド> | set key value |
| 結果> | OK |
| コマンド> | migrate 192.168.56.102 6379 key 0 1000 |
| 結果> | OK |
| コマンド> | exists key |
| 結果> | 0 |
| コマンド> | set key XXXXX |
| 結果> | OK |
| コマンド> | migrate 192.168.56.102 6379 key 0 1000 |
| 結果> | (error) ERR Target instance replied with error: BUSYKEY Target key name already exists. |
| コマンド> | get key target Redis Server に接続して確認 |
| 結果> | value |
| このコマンドは内部で dump, restore, del コマンドを実行します。 copy, replace オプションを使わなければ source server が 3.0 で target server が 2.8 でも構いません。 ただしこの2つのオプションを使うには source, target server ともに 3.0 以上である必要があります。 copy, replace オプションは 3.0 から使用できます。 |
Copy, replace オプションの使用
使い方は migrate host port key destination-db copy replace です。
copy は source server から消しません。
replace は target server に該当 key があれば上書きします。
copy と replace オプションを一緒に使っても構いません
Example
| コマンド> | migrate 192.168.56.102 6379 key 0 1000 copy |
| 結果> | OK |
| コマンド> | exists key |
| 結果> | 0 |
| コマンド> | set key YYYYY |
| 結果> | OK |
| コマンド> | migrate 192.168.56.102 6379 key 0 1000 replace |
| 結果> | OK |
| コマンド> | get key target Redis Server に接続して確認 |
| 結果> | YYYYY |
Auth, Auth2 オプション
Auth は requirepass パラメータを指定した場合に使い(4.0.6から)、 Auth2 は ACL(version 6 から適用)を 利用する場合に使います。
- キー1つの移動: MIGRATE host port key dbid timeout [COPY | REPLACE | AUTH password | AUTH2 username password]
- 複数キーの移動: MIGRATE host port "" dbid timeout [COPY | REPLACE | AUTH password | AUTH2 username password] KEYS key1 key2 ... keyN
Multi key 移動
version 3.0.6 から multi key を移動できます。
migrate 192.168.56.102 6379 "" 0 1000 KEYS key1 key2 key3
指定したキーがすべてなければ 'NOKEY' を返し、
一部のキーがなくてもエラーを出さず 'OK' を返します。
Example
| コマンド> | migrate 192.168.56.102 6379 "" 0 1000 KEYS key1 key2 key3 |
| 結果> | OK |
|
Multi key 使用時、移動するキーに expire が設定されている場合
バグにより他のキーに expire が設定されることがあります。
このバグは 3.2.7 で修正されました。 詳しい内容はこちらを見てください。 |
クラスタ(cluster)でのキー移動
クラスタ環境でキー(データ)を別のマスターサーバーへ移すには、まずスロットの移動予告をしてから行う必要があります。
CLUSTER SETSLOT IMPORTING/MIGRATING コマンドを実行後 MIGRATE コマンドでデータを移動し、
CLUSTER SETSLOT NODE を使って完了する必要があります。
Redis-cli または redis-trib.rb で reshard によるキー移動時にこの migrate コマンドを使います。
CLUSTER SETSLOT コマンドはこちらを
実際の移動例はクラスタ設計を見てください。
構文
MIGRATE host port key|"" destination-db timeout [COPY] [REPLACE] [AUTH|AUTH2] [KEYS key [key ...]]
- このコマンドは version 2.6.0 から使用できます。
- 時間計算量: source server では内部で dump + del が実行され、target server では restore が実行されます。
- copy, replace オプションは 3.0 から使用できます。
- 3.0.6 から multi key オプションの KEYS を使用できます。
- Auth: 4.0.6 から使用できます。
- Auth2: 6.0 から使用できます。
- 6.0 から Event Notification 発生 -> 'del' (COPY オプションを使わなかった場合)
| 関連コマンド | DUMP, RESTORE |
| Clients for Java | Jedis, Lettuce, Redisson | Clients for C | Hiredis |
| << RESTORE | MIGRATE | TOUCH >> |
|---|
