接続プールと redis パイプラインを含む redis クライアントを実装しました
conn.go
func (c *conn) Do(cmd string, args ...interface { }) (インターフェース{}、エラー){
if cmd != "" { if err := c.writeCommand(cmd, args); err != nil { return nil, c.fatal(err) } } if err := c.bw.Flush(); err != nil { return nil, c.fatal(err) } for i := 0; i <= pending; i++ { var e error if reply, e = c.readReply(); e != nil { return nil, c.fatal(e) } if e, ok := reply.(Error); ok && err == nil { err = e } }
}
#メソッドは、リクエストの 3 つのプロセス (送信、フラッシュ、受信) をカプセル化します。
1、送信はリクエストを出力に書き込みます。 buffer
2、Flushはバッファコマンドをサーバーに送信します
3、Receiveはサーバーからの応答を受信します
https://godoc.org/github .com/gomodule/redigo/redis#hdr-Pipelining
// conn is the low-level implementation of Conn
redis はテキスト プロトコルであるため、送信時には redis プロトコルに従ってシリアル化し、受信時には redis プロトコルに従って逆シリアル化する必要があります。
# です。 ##1. " " と記号で始まる単純な文字列
文字列には CR または LF を含めることはできません (改行は許可されません)
例: " OK\r\n"
注: バイナリセーフ文字列を送信するには、通常、次のバルク文字列タイプ
2 を使用することをお勧めします。エラー、" -"マイナス記号で始まります
エラー メッセージには CR または LF を含めることはできません (改行は許可されません)。エラーは次のようなものと非常に似ています。単純な文字列。異なるエラーは例外として扱われます。
例: "-Error unknown command 'foobar'\r\n"
3. 整数型 整数。「:」コロンで始まります。
例: ":1000\r\n"
4. "$" で始まる大きな文字列タイプのバルク文字列ドル記号、長さ制限 512M
文字列には CR または LF を含めることはできません (改行は許可されません);
例: "$
6\r\nfoobar\r\n" 文字列は foobar、6 は foobar " $0 \r\n\r\n" " 空の文字列
"$-1\r\n" "$-1\r\n" null
5. 配列型 配列、 "*" アスタリスクで始まる
注: \r のみ\n 配列に属する要素の数の後、最後の \r\n は通常要素の
です。例: "*0\r\n" 空の配列
"*2\r\n$2\r\nfoo\r\n $3\r\nbar\r\n" 配列には、文字列 foo と bar
の 2 つの要素が含まれています。 "*3\r \n:1\r\n:2\r\n:3 \r\n" " 配列には 3 つの整数が含まれています: 1、2、3
"*5\r\n:1\r \n:2\r\n:3\r\n:4\ r\n$6\r\nfoobar\r\n" 混合型を含む配列
"*-1\r\n" " Null 配列
"*2\r\n*3 \r\n:1\r\n:2\r\n:3\r\n*2\r\n Foo\r\n -Bar\r\n" ネストされた配列。次のように並べ替えると、外側の配列には 2 つの配列が含まれます:
"*2\r\n
*3\r\n:1\ r\n:2\r\n:3\r\n
*2\r\n Foo\r\n-Bar\r\n"
以上がgolang redisクライアントに接続する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。