01,Golang官方推荐。上一篇介绍了go-redis,一个Golang操作Redis的三方库。本文主要介绍Golang操作Redis的另一个三方库redigo。Golang官方推荐的。客户端。go-redis三方库封装了很多函数供我们执行Redis命令,而redigo三方库只有一个Do函数来执行Redis命令,更接近于使用redis-cli来操作Redis。这是我个人的喜好。只要你熟悉Redis,你就可以很方便的使用redigo作为客户端来操作Redis,而无需记住三方库封装的功能。使用goget命令安装redigo:gogetgithub.com/gomodule/redigo/redisredigo库中的Conn界面是操作Redis的主要界面。typeConninterface{//Closeclosestheconnection.Close()error//Errreturnsan-nilvaluewhentheconnectionisnotusable.Err()error//Dosendacommandtotheserverandreturnstherereceivedreply.Do(commandNamestring,args...interface{})(replyinterface{},errrerror)//发送测试命令到(commandNamestring,args...interface{})error//FlushflushestheoutputbuffertotheRedisserver.Flush()error//ReceivereceivesasinglereplyfromtheRedisserverReceive()(replyinterface{},errerror)}阅读redigo库的源码,我们可以发现Conn接口包含6个方法。本文我们主要使用Do和Close。02创建连接redigo库提供了多个创建连接的函数。在本文中,我们使用Dial函数来创建连接。此外,您还可以使用DialURL函数和NewConn函数来创建连接。限于篇幅,本文不打算一一介绍。示例代码://连接redis-server//创建连接c,err:=redis.Dial("tcp",":6379")iferr!=nil{fmt.Printf("redis.Dial()error:%v",err)return}//关闭连接deferc.Close()看了上面的代码,我们使用Dial函数创建连接,需要注意的是不要忘记关闭连接。这种方法主要是为了方便读者朋友们理解。生产环境推荐使用连接池,避免每次执行命令都需要创建连接,影响性能。03string操作redigo执行Redis命令的一般方法是使用Conn接口的Do函数。Do函数可以向Redis服务器发送命令,并从Redis服务器返回回复。Do(commandNamestring,args...interface{})(replyinterface{},errerror)示例代码:funcstringSet(connredis.Conn){replySet,err:=conn.Do("SET","key1","value1")iferr!=nil{fmt.Println("SETerror:",err)}fmt.Println(replySet)}阅读上面的代码,我们使用Do函数执行Redis的set命令,限于篇幅,更多关于string输入redis命令示例代码,请阅读本文推送到GitHub的相关代码。04复合类型操作除了操作字符串,我们还操作复合类型。redigo库中的Args类型提供了AddFlat方法来操作复合类型。func(argsArgs)AddFlat(vinterface{})Args写操作:typeUserstruct{IDint64`redis:"id"`Namestring`redis:"name"`}//structfuncstructAdd(connredis.Conn){u1:=User{ID:1,Name:"name1",}replyStruct,err:=conn.Do("HMSET",redis.Args{}.Add("hkey1").AddFlat(&u1)...)iferr!=nil{fmt.Println("structerr:",err)}fmt.Println(replyStruct)}阅读上面的代码,我们使用AddFlat方法将结构体写入Redis,需要注意的是结构体字段是一个可导出的字段名,并使用Field标签redis。读操作:funcstructValues(connredis.Conn){v,err:=redis.Values(conn.Do("HGETALL","hkey1"))iferr!=nil{fmt.Println("redis.Values()err:",err)}//redis.ScanStruct()u2:=new(User)iferr:=redis.ScanStruct(v,u2);err!=nil{fmt.Println("redis.ScanStruct()err:",err)}fmt.Printf("%+v\n",u2)}看了上面的代码,我们使用两个辅助函数Values和ScanStruct来解析Redis服务器的回复到struct,redigo也提供了辅助函数ScanSlice将Redis服务器的回复解析成切片。限于篇幅,map和slice的示例代码请阅读本文推送到GitHub的相关代码。05总结在本文中,我们介绍了redigo,这是Golang官方推荐的用于操作Redis的三方库。它只需要使用Do函数就可以执行所有的Redis命令。它还提供了很多辅助函数来帮助我们更方便的操作Redis。本文转载自微信公众号《Golang语言开发栈》,可通过以下二维码关注。转载本文请联系Golang语言开发栈公众号。
