연결 풀과 redis 파이프라인을 포함한 redis 클라이언트를 구현합니다
conn.go
func (c *conn) Do(cmd string, args ...interface{}) (interface{}, error){
으아아아
}
메서드는 요청의 세 가지 프로세스인 Send, Flush 및 Receiver
1를 캡슐화하고, send는 요청을 출력 버퍼
2에 쓰고, Flush는 버퍼 명령을 서버
에 보냅니다. 3, 서버로부터 응답을 받습니다
https://godoc.org/github.com/gomodule/redigo/redis#hdr-Pipelining
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 } }
redis는 텍스트 프로토콜이기 때문에 보낼 때는 redis 프로토콜에 따라 직렬화하고, 수신할 때는 redis 프로토콜에 따라 역직렬화해야 합니다.
간격 기호는 Linux에서는 rn이고 Windows에서는 n입니다.
R2. , "-" 빼기
로 시작 형식: -Wly 오류 서문 오류 메시지 RN
오류 메시지에는 CR 또는 LF가 포함될 수 없습니다(변경이 허용되지 않음). 오류는 단순 문자열과 매우 유사하며 차이점은 ErRos가 예외로 처리됨
예: "-오류 알 수 없는 명령 'foobar'rn"
형식:: 숫자 rn
예: ":1000rn"
串4 . 큰 문자열 유형 대량 문자열, "$" 미국 달러 기호로 시작, 길이 제한은 512M 형식: $ 문자열의 길이 RN 문자열 RN 문자열은 CR 또는 LF를 포함할 수 없습니다(변경이 허용되지 않음). "$6
rnfoobar
rn" 여기서 문자열은 foobar이고 6은 foobar의 문자 길이입니다. Null5. 배열 유형 별표 "*"로 시작하는 배열 형식: * 배열 요소 수 rn 다른 모든 유형(마지막에 rn이 필요하지 않음) 요소의0rn" 빈 배열 "*2rn$2rnfoorn$3rnbarrn" 배열에는 2개의 요소가 포함되어 있습니다. string foo and bar
"*3rn:1rn:2rn:3rn" 배열 3개의 정수 포함: 1, 2, 3 “*5rn:1rn:2rn:3rn:4rn$6rnfoobarrn” 혼합 유형을 포함하는 배열 “* -1rn” Null 배열 “*2rn*3rn :1rn:2rn: 3rn*2rn+Foorn-Barrn" 배열은 중첩되어 있습니다. 외부 배열에는 2개의 배열이 포함되어 있습니다. 정렬 후 다음과 같습니다. "위 내용은 golang redis 클라이언트를 연결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!