GoFrame框架gredis優(yōu)雅的取值和類(lèi)型轉(zhuǎn)換
上一篇文章為大家介紹了 GoFrame gcache使用實(shí)踐 | 緩存控制 淘汰策略 ,得到了大家積極的反饋。
后續(xù)幾篇文章再接再厲,仍然為大家介紹GoFrame框架緩存相關(guān)的知識(shí)點(diǎn),以及自己項(xiàng)目使用中的一些總結(jié)思考,GoFrame框架下文簡(jiǎn)稱(chēng)gf。
今天重點(diǎn)為大家介紹:GoFrame gredis 如何優(yōu)雅的取值和類(lèi)型轉(zhuǎn)換
取值方法
不推薦
通過(guò)客戶端方法Do/Receive獲取的數(shù)據(jù)都是二進(jìn)制形式[]byte的,需要開(kāi)發(fā)者手動(dòng)進(jìn)行數(shù)據(jù)轉(zhuǎn)換。 不推薦大家這么取值。
推薦
gredis模塊也提供了DoVar/ReceiveVar方法,用以獲取可供方便轉(zhuǎn)換的gvar.Var通用變量結(jié)果。
通過(guò)gvar.Var的強(qiáng)大轉(zhuǎn)換功能可以轉(zhuǎn)換為任意的數(shù)據(jù)類(lèi)型,如基本數(shù)據(jù)類(lèi)型:Int,String,Strings,或者結(jié)構(gòu)體Struct等等。
DoVar示例
package main import ( "fmt" "github.com/gogf/gf/frame/g" ) func main() { conn := g.Redis().Conn() defer conn.Close() conn.Do("SET", "key", "value") v, _ := conn.DoVar("GET", "key") fmt.Println(v.String()) //打印結(jié)果:value }
ReceiveVar示例
package main import ( "fmt" "github.com/gogf/gf/frame/g" ) func main() { conn := g.Redis().Conn() defer conn.Close() _, err := conn.Do("SUBSCRIBE", "channel") if err != nil { panic(err) } for { reply, err := conn.ReceiveVar() if err != nil { panic(err) } fmt.Println(reply.Strings()) } }
執(zhí)行后,程序?qū)⒆枞却@取數(shù)據(jù)。
另外打開(kāi)一個(gè)終端通過(guò)redis-cli命令進(jìn)入Redis Server,發(fā)布一條消息:
$ redis-cli 127.0.0.1:6379> publish channel gf-test (integer) 1 127.0.0.1:6379>
隨后程序終端立即打印出從Redis Server獲取的數(shù)據(jù):
[message channel gf-test]
HashSet示例
小技巧
如果我們習(xí)慣使用Redis的HashSet數(shù)據(jù)結(jié)構(gòu),我們可以非常方便地將Redis中的HashSet獲取并轉(zhuǎn)換為Golang中的Map數(shù)據(jù)類(lèi)型。
package main import ( "fmt" "github.com/gogf/gf/container/gvar" "github.com/gogf/gf/frame/g" ) func main() { var ( err error result *gvar.Var key = "test" ) _, err = g.Redis().Do("HSET", key, "id", 1) if err != nil { panic(err) } _, err = g.Redis().Do("HSET", key, "name", "王中陽(yáng)") if err != nil { panic(err) } result, err = g.Redis().DoVar("HGETALL", key) if err != nil { panic(err) } fmt.Println(result.Map()) //打印結(jié)果:map[id:1 name:王中陽(yáng)] }
總結(jié)
通過(guò)這篇文章我們了解到:可以使用DoVar和ReceiveVar獲取可供方便轉(zhuǎn)換的gvar.Var通用結(jié)果,通過(guò)gvar.Var的強(qiáng)大轉(zhuǎn)換功能可以轉(zhuǎn)換為任意的數(shù)據(jù)類(lèi)型。
另外了解到一個(gè)小技巧:如果使用Redis的HashSet數(shù)據(jù)結(jié)構(gòu),我們可以非常方便地將Redis中的HashSet獲取并轉(zhuǎn)換為Golang中的Map數(shù)據(jù)類(lèi)型。
更多關(guān)于GoFrame gredis取值類(lèi)型轉(zhuǎn)換的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
go語(yǔ)言實(shí)現(xiàn)二叉樹(shù)的序例化與反序列化
這篇文章主要介紹了go語(yǔ)言實(shí)現(xiàn)二叉樹(shù)的序例化與反序列化,文章圍繞主題展開(kāi)詳細(xì)內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-05-05go語(yǔ)言執(zhí)行等待直到后臺(tái)goroutine執(zhí)行完成實(shí)例分析
這篇文章主要介紹了go語(yǔ)言執(zhí)行等待直到后臺(tái)goroutine執(zhí)行完成的方法,實(shí)例分析了Go語(yǔ)言中WaitGroup的使用技巧,需要的朋友可以參考下2015-03-03詳細(xì)介紹Go語(yǔ)言之?dāng)?shù)組與切片
這篇文章介紹Go語(yǔ)言之?dāng)?shù)組與切片,數(shù)組是具有相同唯一類(lèi)型的一組已編號(hào)且長(zhǎng)度固定的數(shù)據(jù)項(xiàng)序列,這種類(lèi)型可是任意的原始類(lèi)型如整形、字符串或自定義類(lèi)型。切片是數(shù)組的一個(gè)引用,因此切片是引用類(lèi)型,在進(jìn)行傳遞時(shí),遵守引用傳遞的機(jī)制,下面我們就來(lái)詳細(xì)了解一下該內(nèi)容2021-10-10golang 調(diào)用c語(yǔ)言動(dòng)態(tài)庫(kù)方式實(shí)現(xiàn)
本文主要介紹了golang 調(diào)用c語(yǔ)言動(dòng)態(tài)庫(kù)方式實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12