この問題に関して、Redis
ミドルウェアを作成するときに RESP
プロトコルを理解する必要がある理由を例を通して説明したいと思います。
上記のコードは非常に単純な TCP
サーバーです。8888
ポートをリッスンし、 を使用しようとします。 redis -cli -p 8888
サーバーに接続した後、印刷されたアプリケーション層メッセージを表示します。
このコードを実行し、redis-cli -p 8888
と入力して接続してみます。
私たちが作成したサーバーは、redis
クライアントからメッセージを取得します:
#*1上記は$7
COMMAND
RESP プロトコルの内容であるため、
Redis ミドルウェアを作成したい場合は、まず
RESP プロトコルを理解する必要があります。
RESPこのプロトコルはもともと
Redis サーバーとクライアント間の通信用に設計されました。このプロトコルは
Redis 1.2 で導入され、
Redis 2.0 で標準プロトコルになりました。
Redis 通信用。このプロトコルには次の利点があります。
そのプロトコル プレフィックスに従って、整数、文字列、配列などのさまざまなデータ型をシリアル化でき、通常の出力とエラー出力もシリアル化できます。マークされます。パイプラインとパブリッシュとサブスクライブに加えて、RESP
プロトコルは最も単純な要求/応答プロトコルである必要があります。詳細については、上記の公式ドキュメントを参照してください。 RESP プロトコル仕様
プロトコルの異なる部分は \r\n
(改行文字) を使用して区切られ、5 種類をサポートします。データの種類は、単純な文字列、エラー、整数、複雑な文字列、配列です。
備考 | 単純な文字列 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
単純な文字列は | エラー データ | ||||||||||||
エラー データは - | ## で始まります | #整数 | |||||||||||
整数は次で始まります: | ##複雑な文字列 | $ | |||||||||||
Array | * | ||||||||||||
で始まる配列 |
主机 | 端口 | 密码 | 角色 |
---|---|---|---|
127.0.0.1 | 6379 | 无 | 主库 |
127.0.0.1 | 7380 | 无 | 从库 |
以上がGo で Redis の読み取りと書き込みの分離を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。