CLIENT KILL [ip:port] [ID client-id] [TYPE normal|master|slave|pubsub] [USER username] [ADDR ip:port] [SKIPME yes/no]

CLIENT KILL コマンドは指定されたクライアント接続を閉じます。Redis 2.8.11までは、以下の形式を使ってクライアントアドレスのみを使って接続を閉じることができました:

CLIENT KILL addr:port

ip:portCLIENT LIST コマンド (addr フィールド) によって返される行に一致しなければなりません。

しかしRedis 2.8.12以降では、コマンドは以下の形式を受け付けます:

CLIENT KILL <filter> <value> ... ... <filter> <value>

新しい形式を使って、アドレスだけによってクライアントをkillする代わりに異なる属性によってkillすることができます。以下のフィルターが利用可能です:

  • CLIENT KILL ADDR ip:port。これは古い3つの引数の挙動と完全に同じです。
  • CLIENT KILL ID client-id。ユニークなIDフィールドによってクライアントをkillすることができます。これはRedis 2.8.12から CLIENT LIST コマンドに導入されました。
  • CLIENT KILL TYPE typetypenormal, master, slave および pubsub のうちの1つです (master type は v3.2から利用可能です)。これは指定されたクラス内の全てのクライアントの接続を閉じます。MONITORコマンド内でブロックされたクライアントは、normal クラスに所属すると見なされます。
  • CLIENT KILL USER username. 指定されたACLユーザ名で認証された全ての接続を閉じますが、ユーザ名が既存のACLユーザにマッピングされていない場合はエラーを返します。
  • CLIENT KILL SKIPME yes/no. デフォルトでは、このオプションはyesに設定されます。つまり、コマンドを呼び出すクライアントはkillされないですが、このオプションを no に設定するとコマンドを呼び出すクライアントもkillする影響があるでしょう。

注意: Redis 5 からはslaveという単語はもう使いません。代わりにTYPE replicaを使うことができますが、古い形式は後方互換性のためにまだサポートされます。

同時に複数のフィルタを提供することができます。コマンドは論理積を使って複数のフィルタを処理するでしょう。例えば:

CLIENT KILL addr 127.0.0.1:12345 type pubsub

は有効で、指定されたアドレスを持つpubsubクライアントのみをkillするでしょう。複数のフィルタを含むこの形式は現在のところあまり便利ではありません。

新しい形式が使われた場合、コマンドはもうOKあるいはエラーを返さず、代わりにkillされたクライアントの数を返しますが、それは0かもしれません。

*CLIENT KILL と Redis Sentinel

最近のRedis Sentinel (Redis 2.8.12 以上) はインスタンスが再設定された時にクライアントをkillし、クライアントが再び1つのSentinelとハンドシェイクをして設定を更新をさせるために、CLIENT KILL を使用します。

*注意

Redisのシングルスレッドの性質により、コマンドを実行している間にクライアント接続をkillすることができません。クライアントの観点からは、コマンドの実行の途中で接続は決して閉じることはできません。しかし、クライアントは次のコマンドが送信(そしてネットワークエラーになる)される時のみ接続が閉じられたことを知るでしょう。

*返り値

3つの引数の形式で呼ばれた場合:

Simple string reply: もし接続が存在し閉じられた場合 OK

フィルタ/値の形式で呼ばれた場合:

Integer reply: killされたクライアントの数。

TOP
inserted by FC2 system