Redis は表面的で申し訳ありません (原則): データ転送プロトコル RESP

I.はじめに

 
  Redis バージョン 4.0 より前は、Redis はシングルスレッド プログラムであり、主に Redis のネットワーク I/O スレッドを参照していました。Redis の永続性やクラスターの同期などの操作は、別のスレッドによって実行されます。しかし、Redis バージョン 4.0 以降、Redis はマルチスレッド サポートを追加しましたが、現時点では、マルチスレッドは主にビッグ データの非同期削除機能に反映されています。Redis 6.0 バージョン以降、マルチスレッド I/O の読み取りおよび書き込み同時実行機能が追加されました。
 
  Redis の操作はメモリ内で実行され、1 つのノードが CPU コアの QPS を実行します (1 秒あたりのクエリ レート、Queries-per-second は、特定のクエリ サーバーが指定された時間内に処理するトラフィックの量の尺度です)。 10w/sに達することができます。
 
  Redis はRESP协议データ転送を使用します。RESP プロトコルとは何ですか? 具体的な症状とは?
 
  Redis に関連するインストールとデプロイのブログは次のとおりです。

Docker は最新の Redis6 (redis-6.2.7) をインストールします (公式ドキュメントを参照)
 
Docker は Redis7 の最新の安定バージョン (redis-7.0.5) をインストールします (公式ドキュメントを参照)
 
最適な最新の Redis6 (redis-6.2.7) を記述します) クラウド サーバー Centos7 のインストールとデプロイのチュートリアル (公式ドキュメントを参照)
 
クラウド サーバーの Centos7 のインストールとデプロイのチュートリアル (公式ドキュメントを参照) に Redis7 の最新の安定版 (redis-7.0.5) を記述します。

 
  Redis の公式リリース ノート (Google 翻訳付き) は次のとおりです。

Redis-7.0.x版公式リリースノート(Google翻訳付)【継続更新】
 
Redis-6.2.x版公式リリースノート(Google翻訳付)【継続更新】

 
  「Redis I'm Sorry I'm Surfaceficial」シリーズの記事:

1. Redis は私の表面的なことで申し訳ありません (原則): データ転送プロトコル RESP
 
2. Redis は私の表面的なことで申し訳ありません (基本とアプリケーション): ビットマップ (ビットマップ) の魔法のような使い方と各コマンドの使用法の詳細な分析

  本文由 @大白有点菜 原创,请勿盗用,转载请说明出处!如果觉得文章还不错,请点点赞,加关注,谢谢!
 

2. RESP プロトコルの説明

 
  【RESPプロトコル仕様解説 - 公式ドキュメント】:
  https://redis.io/docs/reference/protocol-spec/Redis
 
  公式紹介 RESPプロトコル仕様(Google翻訳):

  Redis クライアントは、RESP (REdis Serialization Protocol) と呼ばれるプロトコルを使用して Redis サーバーと通信します。このプロトコルは Redis 専用に設計されていますが、他のクライアント サーバー ソフトウェア プロジェクトにも使用できます。
  Redis 客户端使用称为 RESP(REdis 序列化协议)的协议与 Redis 服务器进行通信。虽然该协议是专门为 Redis 设计的,但它也可以用于其他客户端-服务器软件项目。
 
  RESP は、次のことを妥協したものです。
  RESP 是以下各项之间的折衷:

  • 実装が簡単。
  • 易于实施。
  • 解析が速い。
  • 快速解析。
  • 人間可読。
  • 人员可读。
     

  RESP は、整数、文字列、配列などのさまざまなデータ型をシリアル化できます。エラーには特定のタイプもあります。リクエストは、実行するコマンドの引数を表す文字列の配列として、クライアントから Redis サーバーに送信されます。Redis はコマンド固有のデータ型で応答します。
  RESP 可以序列化不同的数据类型,如整数、字符串和数组。还有一种特定的错误类型。请求作为字符串数组从客户端发送到 Redis 服务器,这些字符串表示要执行的命令的参数。 Redis 使用特定于命令的数据类型进行回复。
 
  RESP はバイナリ セーフであり、プレフィックス長を使用してバルク データを転送するため、あるプロセスから別のプロセスに転送されるバルク データの処理を必要としません。
  RESP 是二进制安全的,不需要处理从一个进程传输到另一个进程的批量数据,因为它使用前缀长度来传输批量数据。
 
  注: ここで説明するプロトコルは、クライアント サーバー通信にのみ使用されます。Redis クラスターは、ノード間でメッセージを交換するために異なるバイナリ プロトコルを使用します。
  注意:此处概述的协议仅用于客户端-服务器通信。 Redis 集群使用不同的二进制协议来在节点之间交换消息。
 
  RESP プロトコルは Redis 1.2 で導入されましたが、Redis 2.0 で Redis サーバーと通信するための標準的な方法になりました。
  RESP 协议在 Redis 1.2 中引入,但在 Redis 2.0 中成为与 Redis 服务器通信的标准方式。

  簡単に言えば、RESP は序列化协议プログラマーが直感的に理解できるテキスト プロトコルであり、実装が簡単で、強力な分析性能を備えています。
 
  RESP プロトコルはSimple Strings(简单字符串,即单行字符串)、 、Errors(错误)Integers(整数)、Bulk Strings(批量字符串,即多行字符串)およびのデータ型をサポートしていますArrays(数组)
 
  RESP プロトコルは、主に伝送データを 5 つの最小単位タイプに分割し、回车换行符【\r\n】各単位の末尾に「 」を一律に追加します。

1. 単純な文字列 (1 行の文字列、Simple Strings)+は " " 記号で始まります。
 
2. 一括文字列(複数行文字列、Bulk Strings$は「 」記号で始まり、その後に字符串长度.
 
3. 整数 ( Integers):は記号 " " で始まり、その後に が続きます整数的字符串形式
 
4. エラー ( Errors)-は " " 記号で始まります。
 
5. 配列 ( Arrays) は*記号 " " で始まり、その後に数组的长度.

 

3. RESPプロトコルの適用

 
  【注意】:回车换行符【\r\n】各単位の後に「 」を追加します。
 

1. データ伝送フォーマット

 

1.1 単一行の文字列 (単純な文字列、単純な文字列)

  単純な文字列は次のようにエンコードされます: プラス文字の後に、CR または LF 文字 (改行は許可されません) を含むことができない文字列が続き、CRLF (つまり「\r\n」) で終了します。
  简单字符串编码如下:一个加号,后跟一个不能包含 CR 或 LF 字符的字符串(不允许换行),并以 CRLF(即“\r\n”)结尾。
 
  単純な文字列は、最小限のオーバーヘッドでバイナリセーフでない文字列を送信するために使用されます。たとえば、多くの Redis コマンドは、成功すると「OK」だけで応答します。RESP 単純文字列は、次の 5 バイトでエンコードされます:
  简单字符串用于以最小开销传输非二进制安全字符串。例如,许多 Redis 命令在成功时只回复“OK”。 RESP 简单字符串使用以下 5 个字节进行编码:
 
  「+OK\r\n」
 
  バイナリ セーフな文字列を送信するには、代わりに RESP バルク文字列を使用します。
  为了发送二进制安全的字符串,请改用 RESP 批量字符串(Bulk Strings)。
 
  Redis が単純な文字列で応答する場合、クライアント ライブラリは、最後の CRLF バイトを除いて、「+」の後の最初の文字から文字列の最後までで構成される文字列で応答する必要があります。
  当 Redis 回复一个简单字符串时,客户端库应该回复一个字符串,该字符串由“+”之后的第一个字符组成,一直到字符串末尾,不包括最后的 CRLF 字节。

  単純な文字列 (1 行の文字列、Simple Strings)+は " " 記号で始まります。例: こんにちは dbydc

伝送フォーマット:+hello dbydc\r\n

 

1.2 複数行の文字列 (バルク文字列、バルク文字列)

  一括文字列は、長さが 512 MB までの単一のバイナリセーフ文字列を表すために使用されます。
  批量字符串用于表示长度最大为 512 MB 的单个二进制安全字符串。
 
  バルク文字列は次の方法でエンコードされます。
  批量字符串按以下方式编码:
 

  • 「$」バイトの後に、文字列を構成するバイト数 (接頭辞付きの長さ) が続き、CRLF で終了します。
  • “$”字节后跟组成字符串的字节数(前缀长度),以 CRLF 结尾。
  • 実際の文字列データ。
  • 实际的字符串数据。
  • 最終的な CRLF。
  • 最终的 CRLF。

 
  したがって、文字列「hello」は次のようにエンコードされます:
  所以字符串“hello”编码如下:
 
  「$5\r\nhello\r\n」
 
  空の文字列は次のようにエンコードされます:
  空字符串编码为:
 
  「$0\r\n\r\n」
 
  RESP バルク文字列を使用して、 Null 値を表す特別な形式を使用して、値が存在しないことを通知します。この形式では、長さは -1 で、データはありません。Null は
  RESP 批量字符串也可用于使用特殊格式表示值不存在来表示 Null 值。这种格式,长度为-1,没有数据。Null 表示为:
 
  「$-1\r\n」
 
のように表されます。   これは、Null Bulk String と呼ばれます。
  这称为Null批量字符串。
 
  クライアント ライブラリ API は、サーバーが Null Bulk String で応答した場合、空の文字列ではなく nil オブジェクトを返す必要があります。たとえば、Ruby ライブラリは 'nil' を返す必要がありますが、C ライブラリは NULL を返す (または応答オブジェクトに特別なフラグを設定する) 必要があります。
  当服务器回复 Null Bulk String 时,客户端库 API 不应返回空字符串,而应返回 nil 对象。例如,Ruby 库应返回“nil”,而 C 库应返回 NULL(或在回复对象中设置特殊标志)。

  一括文字列 (複数行の文字列Bulk Strings)は、 $" " 記号で始まり、その後に字符串长度. 例: こんにちは dbydc

伝送フォーマット:$11\r\nhello dbydc\r\n

  複数行の文字列は、単一行の文字列を表すこともできます。複数行の文字列 "hello dbydc" の長さは 11 です (hello は 5、スペースは 1、dbydc は 5、つまり 5 + 1 + 5 = 11)。
 

1.3 整数

  このタイプは、整数を表す CRLF で終了する単なる文字列で、先頭に「:」バイトが付きます。たとえば、「:0\r\n」と「:1000\r\n」は整数の応答です。
  这种类型只是一个以 CRLF 结尾的字符串,表示一个整数,前缀为“:”字节。例如,“:0\r\n”和“:1000\r\n”是整数回复。
 
  多くの Redis コマンドは、INCR、LLEN、LASTSAVE などの RESP 整数を返します。
  许多 Redis 命令返回 RESP 整数,例如 INCR、LLEN 和 LASTSAVE。
 
  返される整数に特別な意味はありません。これは、INCR の増分番号、LASTSAVE の UNIX 時間などです。ただし、返される整数は、符号付き 64 ビット整数の範囲内であることが保証されています。
  返回的整数没有特殊含义。它只是 INCR 的递增数字,LASTSAVE 的 UNIX 时间等等。但是,返回的整数保证在带符号的 64 位整数范围内。
 
  true または false を返すために整数応答も使用されます。たとえば、EXISTS や SISMEMBER などのコマンドは、真の場合は 1 を返し、偽の場合は 0 を返します。
  还使用整数回复来返回 true 或 false。例如,像 EXISTS 或 SISMEMBER 这样的命令将返回 1 表示真,0 表示假。
 
  SADD、SREM、SETNX などの他のコマンドは、操作が実際に実行された場合は 1 を返し、それ以外の場合は 0 を返します。
  如果实际执行了操作,其他命令如 SADD、SREM 和 SETNX 将返回 1,否则返回 0。
 
  次のコマンドは整数で応答します: SETNX、DEL、EXISTS、INCR、INCRBY、DECR、DECRBY、DBSIZE、LASTSAVE、RENAMENX、MOVE、LLEN、SADD、SREM、SISMEMBER、SCARD。
  以下命令将以整数回复:SETNX、DEL、EXISTS、INCR、INCRBY、DECR、DECRBY、DBSIZE、LASTSAVE、RENAMENX、MOVE、LLEN、SADD、SREM、SISMEMBER、SCARD。

  整数 ( Integers):は "" 記号で始まり、その後に整数的字符串形式. 例: 666

伝送フォーマット::666\r\n

 

1.4 エラー

  RESP には、エラー用の特定のデータ型があります。これらは RESP 単純文字列に似ていますが、最初の文字はプラスではなくマイナス '-' 文字です。RESP の単純な文字列とエラーの実際の違いは、クライアントがエラーを例外として扱い、エラー型を構成する文字列がエラー メッセージそのものであることです。
  RESP 具有特定的错误数据类型。它们类似于 RESP 简单字符串,但第一个字符是减号“-”而不是加号。简单字符串和 RESP 中的错误之间的真正区别在于客户端将错误视为异常,而组成错误类型的字符串是错误消息本身。
 
  基本的な形式は次のとおりです。
  基本格式为:
 
  「-Error message\r\n」
 
  エラー応答は、たとえば、間違ったデータ型に対して操作を実行しようとした場合や、コマンドが存在しない場合など、何か問題が発生した場合にのみ送信されます。クライアントは、エラー応答を受信したときに例外を発生させる必要があります。
  错误回复仅在出现问题时发送,例如,如果您尝试对错误的数据类型执行操作,或者命令不存在。客户端在收到错误回复时应引发异常。
 
  エラー応答の例を次に示します。
  以下是错误回复的示例:
 
  -ERR 不明なコマンド 'helloworld'
  -WRONGTYPE 間違った種類の値を保持するキーに対する操作
 
  「-」の後の最初の単語から最初のスペースまたは改行までは、返されたエラーの種類を表します。これは Redis で使用される規則にすぎず、RESP エラー形式の一部ではありません。
  “-”之后的第一个单词,直到第一个空格或换行符,表示返回的错误类型。这只是 Redis 使用的约定,不是 RESP 错误格式的一部分。
 
  たとえば、ERR は一般的なエラーですが、WRONGTYPE はより具体的なエラーであり、クライアントが間違ったデータ型に対して操作を実行しようとしたことを意味します。これはエラー プレフィックスと呼ばれ、正確なエラー メッセージを確認せずに、サーバーから返されたエラーの種類をクライアントが理解できるようにする方法です。
  例如,ERR 是一般错误,而 WRONGTYPE 是更具体的错误,表示客户端尝试对错误的数据类型执行操作。这称为错误前缀,是一种允许客户端了解服务器返回的错误类型而无需检查确切错误消息的方法。
 
  クライアント実装は、さまざまなエラーに対してさまざまな種類の例外を返したり、エラー名を文字列として呼び出し元に直接提供することでエラーをトラップする一般的な方法を提供したりできます。
  客户端实现可能会针对不同的错误返回不同类型的异常,或者通过直接将错误名称作为字符串提供给调用者来提供捕获错误的通用方法。
 
  ただし、そのような機能はほとんど役に立たないため、重要であると見なすべきではありません。また、限られたクライアントの実装では、単に false などの一般的なエラー状態が返される可能性があります。
  然而,这样的功能不应该被认为是重要的,因为它很少有用,而且有限的客户端实现可能只是返回一个一般的错误条件,比如 false。

  エラー ( Errors)-は " " 記号で始まります。例: (エラー) WRONGPASS 無効なユーザー名とパスワードのペア、またはユーザーが無効になっています。

伝送フォーマット:-WRONGPASS invalid username-password pair or user is disabled.\r\n

 

1.5 配列

  クライアントは、RESP 配列を使用してコマンドを Redis サーバーに送信します。同様に、要素のコレクションをクライアントに返す特定の Redis コマンドは、応答として RESP 配列を使用します。例として、リストの要素を返す LRANGE コマンドがあります。
  客户端使用 RESP 数组向 Redis 服务器发送命令。类似地,某些将元素集合返回给客户端的 Redis 命令使用 RESP 数组作为它们的回复。一个示例是返回列表元素的 LRANGE 命令。
 
  RESP 配列は、次の形式を使用して送信されます。
  RESP 数组使用以下格式发送:
 

  • 最初のバイトとして * 文字、その後に配列内の要素数 (10 進数)、CRLF が続きます。
  • * 字符作为第一个字节,后跟数组中的元素数(十进制数),然后是 CRLF。
  • 配列のすべての要素に対する追加の RESP タイプ。
  • Array 的每个元素的附加 RESP 类型。

 
  したがって、空の配列は次のようになります:
  所以一个空数组就是以下内容:
 
  「*0\r\n」
 
  一方、2 つの RESP バルク文字列「hello」と「world」の配列は、「
  两个 RESP 批量字符串“hello”和“world”的数组被编码为:
 
  *2\r\n$5\r\nhello\r」としてエンコードされます。 \n$5\r\nworld\r\n」
 
  配列のプレフィックス *<count>CRLF 部分の後にあることがわかるように、配列を構成する他のデータ型は、次々に連結されています。たとえば、3 つの整数の配列は次のようにエンコードされます:
  如您所见,在数组前缀的 *<count>CRLF 部分之后,构成数组的其他数据类型只是一个接一个地连接在一起。例如,三个整数的数组编码如下:
 
  “*3\r\n:1\r\n:2\r\n:3\r\n”
 
  配列には混合型を含めることができるため、要素が同じタイプであること。たとえば、4 つの整数のリストとバルク文字列は次のようにエンコードできます:
  数组可以包含混合类型,因此元素不必是同一类型。例如,一个包含四个整数的列表和一个批量字符串可以编码如下:
 
  *5\r\n
  :1\r\n
  :2\r\n
  :3\r\n
  :4\r\n
  $5\ r\n
  こんにちは\r\n
 
  (返信はわかりやすくするために複数の行に分割されています)。
  (为清楚起见,答复分为多行)。
 
  サーバーが送信する最初の行は *5\r\n で、5 つの応答が続くことを指定します。その後、マルチバルク返信の項目を構成するすべての返信が送信されます。
  服务器发送的第一行是 *5\r\n 以指定随后将有五个回复。然后发送构成多批量回复项目的每个回复。
 
  Null 配列も存在し、Null 値を指定する代替方法です (通常は Null バルク文字列が使用されますが、歴史的な理由から 2 つの形式があります)。
  Null 数组也存在,并且是指定 Null 值的另一种方法(通常使用 Null Bulk String,但由于历史原因,我们有两种格式)。
 
  たとえば、BLPOP コマンドがタイムアウトすると、次の例のようにカウントが -1 の Null 配列が返されます:
  例如,当 BLPOP 命令超时时,它返回一个计数为 -1 的空数组,如下例所示:
 
  「*-1\r\n」
 
  クライアント ライブラリ API は、Redis が Null 配列で応答する場合、空の配列ではなく、null オブジェクトを返す必要があります。これは、空のリストと別の状態 (たとえば、BLPOP コマンドのタイムアウト状態) を区別するために必要です。
  当 Redis 使用空数组回复时,客户端库 API 应该返回空对象而不是空数组。这是区分空列表和不同条件(例如 BLPOP 命令的超时条件)所必需的。
 
  RESP ではネストされた配列が可能です。たとえば、2 つの配列のネストされた配列は次のようにエンコードされます:
  嵌套数组在 RESP 中是可能的。例如,两个数组的嵌套数组编码如下:
 
  *2\r\n
  *3\r\n
  :1\r\n
  :2\r\n
  :3\r\n
  *2\r\n
 
  (読みやすくするために、フォーマットは複数の行に分割されています)。
  (格式被分成多行以便于阅读)。
 
  上記の RESP データ型は、3 つの整数 (1、2、3) と単純な文字列とエラーの配列を含む配列で構成される 2 要素の配列をエンコードします。
  上面的 RESP 数据类型编码一个双元素数组,该数组由一个包含三个整数 (1, 2, 3) 的数组和一个简单字符串数组和一个错误组成。
 
  Array の単一要素は Null の場合があります。これは Redis 応答で使用され、これらの要素が欠落しており、空の文字列ではないことを通知します。これは、指定されたキーが欠落している場合に、SORT コマンドを GET パターン オプションと共に使用すると発生する可能性があります。Null 要素を含む配列応答の例:
  数组的单个元素可能为 Null。这在 Redis 回复中用于表示缺少这些元素而不是空字符串。如果缺少指定的键,则在与 GET 模式选项一起使用时,SORT 命令可能会发生这种情况。包含 Null 元素的数组回复示例:
 
  *3\r\n
  $5\r\n
  hello\r\n
  $-1\r\n
  $5\r\n
  world\r\n
 
  2 番目の要素は Null です。クライアント ライブラリは   次のようなものを返す必要
  第二个元素是 Null。客户端库应该返回如下内容:
 
  があります。
 

  请注意,这不是前面部分所说的例外,而是进一步指定协议的示例。

  array( Arrays)*は "" 記号で始まり、その後に配列が続きます数组的长度例: [2,4,8]

伝送フォーマット:*3\r\n:2\r\n:4\r\n:8\r\n

 

1.6 ヌル

  Null 値を表す特別な形式を使用して、値が存在しないことを通知するために、RESP バルク文字列を使用することもできます。この形式では、長さは -1 で、データはありません。Null は
  RESP 批量字符串也可用于使用特殊格式表示值不存在来表示 Null 值。这种格式,长度为-1,没有数据。Null 表示为:
 
  「$-1\r\n」
 
のように表されます。   これは、Null Bulk String と呼ばれます。
  这称为Null批量字符串。
 
  クライアント ライブラリ API は、サーバーが Null Bulk String で応答した場合、空の文字列ではなく nil オブジェクトを返す必要があります。たとえば、Ruby ライブラリは 'nil' を返す必要がありますが、C ライブラリは NULL を返す (または応答オブジェクトに特別なフラグを設定する) 必要があります。
  当服务器回复 Null Bulk String 时,客户端库 API 不应返回空字符串,而应返回 nil 对象。例如,Ruby 库应返回“nil”,而 C 库应返回 NULL(或在回复对象中设置特殊标志)。

  NULL 値はバッチ文字列 (複数行の文字列、一括文字列) で表され、長さは " -1" です。

伝送フォーマット:$-1\r\n

 

1.7 空文字列

  空の文字列は、長さ " " の一括文字列 (複数行の文字列、一括文字列) で表されます0

伝送フォーマット:$0\r\n\r\n

 

2. クライアント (Client) からサーバー (Server) に送信されるコマンド形式

 
  クライアント (Client) がサーバー (Server) に送信します仅包含批量字符串(多行字符串,Bulk Strings)的 RESP 数组(Array)たとえば、set コマンドが「set author dbydc」を送信すると、次の文字列にシリアル化されます。

*3\r\n$3\r\nset\r\n$6\r\nauthor\r\n$5\r\ndbydc\r\n
 
別のスタイルの表示:
 
*3
$3
set
$6
author
$5
dbydc

 

3. サーバー(Server)からクライアント(Client)への応答フォーマット

 
  サーバー (Server) からクライアント (Client) への応答は、複数のデータ形式をサポートしています。
 

3.1 単一行文字列 (単純文字列、Simple Strings) 応答

127.0.0.1:6379> 作成者 dbydc を設定
OK

  返信の応答は、二重引用符を使用せずに「OK」です。

+OK

 

3.2 複数行文字列(バルク文字列、バルク文字列)レスポンス

127.0.0.1:6379> 作成者
「dbydc」を取得

  複数行の文字列応答の文字列は、二重引用符で囲みます。

$5\r\ndbydc\r\n

 

3.3 整数応答

127.0.0.1:6379> 増分
(整数) 1

  整数の応答は 1 を返します。

:1

 

3.4 エラー応答

127.0.0.1:6379> incr author
(エラー) ERR 値が整数ではないか範囲外です

  文字列がインクリメントされると、サーバーは一般的なエラーをスローします。

-ERR 値が整数ではないか、範囲外です

 

3.5 配列の応答

127.0.0.1:6379> hset ユーザー名 dbydc
(整数) 1
127.0.0.1:6379> hset ユーザー 年齢 18
(整数) 1
127.0.0.1:6379> hset ユーザー 性別 男性
(整数) 1
127.0.0.1:6379> hgetall ユーザー
1)「名前」
2)「dbydc」
3)「年齢」
4)「18」
5)「性別」
6)「男性」

  hgetall は配列を返します。0 番目、2 番目、4 番目の文字列は、ハッシュ テーブルのキーである「名前」、「年齢」、および「性別」です。1、3、5 番目の文字列はハッシュ テーブルの値、つまり「dbydc」、「18」、「male」です。

*6\r\n$4\r\nname\r\n$5\r\ndbydc\r\n$3\r\nage\r\n$2\r\n18\r\n$3\r\nsex\r\n$4\r\nmale\r\n
 
別のスタイルの表示:
 
*6
$4
name
$5
dbydc
$3
age
$2
18
$3
sex
$4
male

 

3.6 ネストされた応答

127.0.0.1:6379> scan 0
1) 「0」
2) 1) 「作者」
   2) 「ユーザー」
   3) 「年齢」

  scan コマンドは、カーソルを使用してサーバーに含まれるすべてのキー リストをスキャンし、毎回一部のみを取得します。
 
  scan コマンドはネストされた配列を返します。最初の値はカーソルの値を表し、0 の場合は走査が完了したことを意味します。0 でない場合、scan コマンドはこの値を次の反復のパラメーターとして使用します。配列 2 番目の値も配列です。この配列はキーのリストです。

*2\r\n$1\r\n0\r\n*3\r\n$6\r\nauthor\r\n$4\r\nuser\r\n$3\r\nage\r\n
 
別のスタイルの表示:
 
*2
$1
0
*3
$6
作成者
$4
ユーザー
$3
年齢

4. データ参照

  1. 「Redis Deep Adventure Core Principles and Application Practice」、著者: Qian Wenpin

おすすめ

転載: blog.csdn.net/u014282578/article/details/128575040