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 のリダイレクトへの対処方法は、各ドキュメントを参照ください。

関連情報