关于通讯协议,见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)后,必须要等待回应到达之后才能发送下一个命令? 这样对客户端来说 效率是否低了点?
阿神2017-04-21 10:59:48
あなたの「クライアントにとって効率が低い」というのは単なるあなたの幻想ですよね?これを裏付けるデータはありますか?根拠となるデータがないのに主観だけで正しく判断できるのでしょうか?
効率とビジネスの間には関係もあります。一般的に、効率がビジネスをサポートしていない場合にのみ、効率の問題を検討し始めます。何かをする前に効率を考えるのは少し時期尚早ではありませんか。
最後にもう一つ追加。 。これは tcp プロトコルの定義です。不明な点がある場合は、http://en.wikipedia.org/wiki/Transmission_Control_Protocol で tcp 仕様を確認してください。 。
迷茫2017-04-21 10:59:48
おそらくこの質問は次のようになります: Redis は 1 つのリクエストで 1 つのコマンドしか送信できませんか? もっと良くなります
結論: どの Redis リクエストプロトコルが使用されても、1 つのリクエストで複数のコマンドを送信することがサポートされます
非標準の Redis リクエスト プロトコル形式 (インラインとも呼ばれます):
コマンド名 パラメータ1 パラメータ2 ... パラメータN
名前を設定します diaocow
標準 Redis リクエスト プロトコル形式:
*<パラメータ数>CR LF
$<パラメータ1のバイト数>CR LF <パラメータ1のデータ>CR LF
...
$<パラメータNのバイト数>CR LF
<パラメータNのデータ> CR LF*3rn$3rnsetrn$4rnnamern$7rndiaocown
そのため、キー名の値を diaocow に設定する必要がある場合、上記の 2 つのプロトコル形式を使用してそれを完了できます (興味のある読者は、telnet または nc コマンドを使用して自分でテストできます)
たとえば、次の 2 つのコマンドをバッチで実行する必要があります:
名前を設定しますdiaocow
設定国中国
その後、リクエスト内のデータは次のようになります (標準プロトコルを使用すると仮定します)。 *3rn$3rnsetrn$4rnnamern$7rndiaocown*3rn$3rnsetrn$7rn国rn$5rnchinarn
その後、redis 内で、次のように解析されます。疑似コード:
リーリーparseCommandInfo はさまざまなプロトコルに従って解析されます。最初のバイトが '*' の場合、標準プロトコルが使用されます
備考: すべての Redis クライアントはコマンドをバッチで送信する機能を実装しています。これは、先ほど説明した形式に従って複数のコマンドを Redis に送信することに他なりません。興味のある読者は、使い慣れた言語でクライアントを参照してください。