十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章主要介绍“golang redis客户端怎么连接”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“golang redis客户端怎么连接”文章能帮助大家解决问题。
目前创新互联建站已为近千家的企业提供了网站建设、域名、雅安服务器托管、绵阳服务器托管、企业网站设计、商水网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
实现了redis客户端,包括一个连接池和redis pipleline
conn.go
func (c *conn) Do(cmd string, args ...interface{}) (interface{}, error){
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个过程 Send, Flush and Receive
1,send 将请求写到输出缓冲
2, Flush将缓冲区的命令发送到服务端
3,Receive 接收服务端的响应
https://godoc.org/github.com/gomodule/redigo/redis#hdr-Pipelining
// conn is the low-level implementation of Conn
type conn struct {
// Shared
mu sync.Mutex
pending int
err error
conn net.Conn
// Read
readTimeout time.Duration
br *bufio.Reader
// Write
writeTimeout time.Duration
bw *bufio.Writer
// Scratch space for formatting argument length.
// '*' or '$', length, "\r\n"
lenScratch [32]byte
// Scratch space for formatting integers and floats.
numScratch [40]byte
}
以上就是连接操作的核心代码
因为redis是文本协议,因此发送时需要按照redis协议序列化,接收的时候按照redis协议反序列化。
间隔符号,在Linux下是\r\n,在Windows下是
格式:+ 字符串 \r
字符串不能包含 CR或者 LF(不允许换行)
eg: "+OK\r\n"
注意:为了发送二进制安全的字符串,一般推荐使用后面的 Bulk Strings类型
格式:- 错误前缀 错误信息 \r
错误信息不能包含 CR或者 LF(不允许换行),Errors与Simple Strings很相似,不同的是Erros会被当作异常来看待
eg: "-Error unknow command 'foobar'\r\n"
格式:: 数字 \r
eg: ":1000\r\n"
格式:$ 字符串的长度 \r\n 字符串 \r
字符串不能包含 CR或者 LF(不允许换行);
eg: "$6\r\nfoobar\r\n" 其中字符串为 foobar,而6就是foobar的字符长度
"$0\r\n\r\n" 空字符串
"$-1\r\n" null
格式:* 数组元素个数 \r\n 其他所有类型 (结尾不需要\r\n)
注意:只有元素个数后面的\r\n是属于该数组的,结尾的\r\n一般是元素的
eg: "*0\r\n" 空数组
"*2\r\n$2\r\nfoo\r\n$3\r\nbar\r\n" 数组包含2个元素,分别是字符串foo和bar
"*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
*3\r\n:1\r\n:2\r\n:3\r
*2\r\n+Foo\r\n-Bar\r\n"
关于“golang redis客户端怎么连接”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注创新互联行业资讯频道,小编每天都会为大家更新不同的知识点。