Redisへのコマンド実行時に発生する”(error) MOVED”エラーを解決する方法
問題
クラスターを組んだ Redis に対して、redis-cli からコマンド実行すると "(error) MOVED" エラーが発生することがあります。
$ redis-cli -h HOSTNAME set foo bar (error) MOVED 12182 172.31.11.135:6379
原因
コマンドに対応するハッシュスロットが別ノードにあり、コマンドを別ノードで処理する必要があるときに、このエラーが発生します。
上記エラーメッセージでは
12182
はハッシュスロット172.31.11.135:6379
はこのハッシュスロットを処理可能なノードの IP アドレス:ポート番号
を表します。
解決法
redis-cli に -c
オプションを追加してください。
Redis クラスターの返す MOVED
/ASK
リダイレクトに対して、適切なノードにコマンドを投げ直します。(Enable cluster mode (follow -ASK and -MOVED redirections).)
$ redis-cli -c -h HOSTNAME set foo bar OK
Redis SDK のリダイレクトへの対処方法は、各ドキュメントを参照ください。