hello
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 をそのまま出力するときに使用
クライアント名の設定 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 >> |
|---|
