巴塞罗那队标

admin · 2011-06-01

01先容

  正在以前的作品先容过 Golang 操纵 Redis 的三方库 go-redis,本文首要先容另一个 Golang 操纵 Redis 的三方库 redigo,它是 Golang 官方引荐利用的 Redis 客户端。

  go-redis 三方库为咱们封装了良众函数来履行 Redis 号令,而 redigo 三方库惟有一个 Do 函数履行 Redis 号令,更靠拢利用 redis-cli 操纵 Redis,这一点是我个别斗劲嗜好的,只有熟习 Redis,就能够轻松利用 redigo 举动客户端操纵 Redis,而不需求再去记三方库封装的函数。

  利用 go get 号令装配 redigo:

  

gogetgithub.com/gomodule/redigo/redis

 

  redigo 库中的 Conn 接口是操纵 Redis 的首要接口。

  

typeConninterface{//Closeclosestheconnection.Close()error//Errreturnsanon-nilvaluewhentheconnectionisnotusable.Err()error//Dosendsaco妹妹andtotheserverandreturnsthereceivedreply.Do(co妹妹andNamestring,args...interface{})(replyinterface{},errerror)//Sendwritestheco妹妹andtotheclientsoutputbuffer.Send(co妹妹andNamestring,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(co妹妹andNamestring,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,需求注重的是构造体字段是可导出的字段称号,而且利用了字段标签 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
",u2)}

 

  浏览下面这段代码,咱们利用两个助手函数 Values 和 ScanStruct,将 Redis 效劳器的答复剖析到 struct,redigo 还供给了助手函数 ScanSlice 将 Redis 效劳器的答复剖析到 slice。

  限于篇幅,对于 map 和 slice 的示例代码,请浏览推送到 GitHub 上的本文联系代码。

   05总结

  本文咱们先容了 Golang 官方引荐的操纵 Redis 的三方库 redigo,它仅需利用 Do 函数履行 Redis 全数号令,它还供给了良众助手函数助助咱们愈加便利操纵 Redis。

  本文转载自微信民众号「Golang说话开辟栈」,能够经由过程如下二维码闭心。转载本文请接洽Golang说话开辟栈民众号。

  

文章推荐:

nba2k18传奇版

cba2k巨星时刻

nba2k11没声音

大赢家篮球比分