HELLO

Redis 開発者教育の申込 Redis 定期点検/技術サポート
Redis Technical Support
Redis エンタープライズサーバー
Redis Enterprise Server

Redis 出力プロトコル(フォーマット)の選択

Redis サーバーとクライアント間のプロトコルを選択(設定)したり照会したりできます。
RESP(REdis Serialization Protocol) は Redis サーバーとクライアント間の(サーバーから見た)出力プロトコルです。 Redis バージョン 6 から RESP3 を新たに追加(新規開発)しました。 Redis バージョン 5 までは RESP2 のみでした。

Redis バージョン 6 でもクライアントはデフォルトで RESP2 で接続されます。

HELLO コマンドでは現在の RESP バージョンを確認でき、RESP バージョンを選択できます。 RESP バージョンはクライアントごとに適用されます。つまり、HELLO 3 を実行したクライアントだけに RESP3 が適用されます。

次の例は RESP 3 で結果が異なることを示します。 これはサーバー全体への適用ではなく、クライアントごとに選択できます。

Example

コマンド>HELLO
結果> 1) "server"
2) "redis/redisGate Enterprise"
3) "version"
4) "8.0.0"
5) "proto"
6) (integer) 2

7) "id"
8) (integer) 3
9) "mode"
10) "standalone/sentinel/cluster/clone(Active-Active)"
11) "role"
12) "master"
13) "modules"
14) (empty array)
コマンド>HELLO 3
結果> 1# "server" => "redisGate Enterprise"
2# "version" => "8.0.0"
3# "proto" => (integer) 3
4# "id" => (integer) 3
5# "mode" => "clone(Active-Active)"
6# "role" => "master"
7# "modules" => (empty array)
コマンド>hgetall myhash
結果> 1# "field1" => "value1"
2# "field2" => "value2"
コマンド>zrange key 0 -1 withscores
結果> 1) 1) "value10"
    2) (double) 10
2) 1) "value11"
    2) (double) 11
3) 1) "value12"
    2) (double) 12
4) 1) "value13"
    2) (double) 13
redisGate Enterprise サーバーの場合、次のように表示されます。        
1# "server" => "redisGate Enterprise"
5# "mode" => "clone(Active-Active)"

RESP2

RESP2 は 5つの形式をサポートします。

  • Status(+): 単純な戻りメッセージ
  • Error(-): エラーメッセージ
  • Integer(:): 整数
  • Bulk($): 値(binary-safe: 特殊文字が含まれても安全な文字列)
  • Multibulk(*): 配列表示(値の個数表示)

RESP2 ではキーと値はすべて bulk で表示します。
キーと値を複数、配列形式で表示するときは、先頭に multibulk(*) と値の個数を表示し、 次に bulk($) で値を表示します。
例) lrange mylist 0 -1 が 3つの値を返すと

Integer(:) は正確に整数を返すコマンドで使用されます。 例) llen, scard, strlen, incr, decr, incrby, decrby など。
incrbyfloat コマンドは bulk を使用します。

RESP3

RESP3 は 13の形式に増えました。 下位プロトコル互換性のため、RESP2 の 5つの形式は変更せずそのまま使用します。
追加されたもののうち代表的なものは Null, Boolean, Double, Set, Map 形式です。
以下は追加された 8つの形式を簡単に説明します。

  • Null(_): Null 表示
  • Boolean(#): true(真)/false(偽) 表示
  • Double(,): 実数(floating point number)
  • Blob error(!): binary-safe エラー
  • Big number((): 非常に大きな整数の表示、例) 3492890328409238509324850943850943825024385
  • Set(~): 集合
  • Map(%): マップ
  • Verbatim string(=): text をそのまま出力するときに使用

RESP の詳しい説明

クライアント名の設定 SETNAME

クライアント名を設定できます。

ACL(Access Control List) を使用してユーザー(user)ごとにコマンド使用権限を付与する場合、 クライアント名を設定するために client コマンドの使用権限を与える必要はなく、 hello コマンドの使用権限を付与するのが安全な方法です。 Client コマンドは kill サブコマンドで他のクライアントを切断できるためです。


構文

HELLO [<protocol-version> [AUTH <user> <password>] [SETNAME <name>]]

  • このコマンドは version 6.0.0 から使用できます。
  • version 6.2.0 から protocol-version を指定せず hello コマンドだけを使用できます。
  • 時間計算量は O(1) です。

<< AUTH HELLO ECHO >>

Email 返事がかかってなれば、メールでお知らせします。