Redis 通讯协议的疑问
怪我咯
怪我咯 2017-04-21 10:57:48
0
3
628

关于通讯协议,见https://redis.readthedocs.org/en/latest/topic/protocol.html

1)命令 set mykey myvalue 对应 要发送到Redis的字符串(要转化为二进制数据)是

"*3\r\n$3\r\nset\r\n$5\r\nmykey\r\n$7\r\nmyvalue\r\n"

2)命令 get mykey 对应字符串是 "*2\r\n$3\r\nget\r\n$5\r\nmykey\r\n"

3)最后得到Redis发回的响应是 "+OK\r\n$7\r\nmyvalue\r\n"

我的问题是,Redis这样的响应格式,是否意味者 客户端发完命令(需要得到返回

值的命令如get)后,必须要等待回应到达之后才能发送下一个命令? 这样对客户端来说 效率是否低了点?

怪我咯
怪我咯

走同样的路,发现不同的人生

全員に返信(3)
左手右手慢动作

これは通常の TCP ストリーミング方法です。

いいねを押す +0
阿神

あなたの「クライアントにとって効率が低い」というのは単なるあなたの幻想ですよね?これを裏付けるデータはありますか?根拠となるデータがないのに主観だけで正しく判断できるのでしょうか?

効率とビジネスの間には関係もあります。一般的に、効率がビジネスをサポートしていない場合にのみ、効率の問題を検討し始めます。何かをする前に効率を考えるのは少し時期尚早ではありませんか。

最後にもう一つ追加。 。これは tcp プロトコルの定義です。不明な点がある場合は、http://en.wikipedia.org/wiki/Transmission_Control_Protocol で tcp 仕様を確認してください。 。

いいねを押す +0
迷茫

おそらくこの質問は次のようになります: Redis は 1 つのリクエストで 1 つのコマンドしか送信できませんか? もっと良くなります

結論: どの Redis リクエストプロトコルが使用されても、1 つのリクエストで複数のコマンドを送信することがサポートされます


redisリクエストプロトコル

非標準の Redis リクエスト プロトコル形式 (インラインとも呼ばれます):

コマンド名 パラメータ1 パラメータ2 ... パラメータN

名前を設定します diaocow

標準 Redis リクエスト プロトコル形式:

*CR LF
$CR LF <パラメータ1のデータ>CR LF
...
$CR LF
<パラメータNのデータ> CR LF

*3rn$3rnsetrn$4rnnamern$7rndiaocown

そのため、キー名の値を diaocow に設定する必要がある場合、上記の 2 つのプロトコル形式を使用してそれを完了できます (興味のある読者は、telnet または nc コマンドを使用して自分でテストできます)

Redis リクエスト プロトコルはバッチ実行をどのようにサポートしていますか? (これはよくパイプライン モードと呼ばれるものです)

たとえば、次の 2 つのコマンドをバッチで実行する必要があります:

  1. 名前を設定しますdiaocow

  2. 設定国中国

その後、リクエスト内のデータは次のようになります (標準プロトコルを使用すると仮定します)。 *3rn$3rnsetrn$4rnnamern$7rndiaocown*3rn$3rnsetrn$7rn国rn$5rnchinarn

その後、redis 内で、次のように解析されます。疑似コード:

リーリー

parseCommandInfo はさまざまなプロトコルに従って解析されます。最初のバイトが '*' の場合、標準プロトコルが使用されます

備考: すべての Redis クライアントはコマンドをバッチで送信する機能を実装しています。これは、先ほど説明した形式に従って複数のコマンドを Redis に送信することに他なりません。興味のある読者は、使い慣れた言語でクライアントを参照してください。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート