日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

GoFrame框架gredis優(yōu)雅的取值和類(lèi)型轉(zhuǎn)換_Golang

作者:王中陽(yáng)Go ? 更新時(shí)間: 2022-08-07 編程語(yǔ)言

上一篇文章為大家介紹了 GoFrame gcache使用實(shí)踐 | 緩存控制 淘汰策略 ,得到了大家積極的反饋。

后續(xù)幾篇文章再接再厲,仍然為大家介紹GoFrame框架緩存相關(guān)的知識(shí)點(diǎn),以及自己項(xiàng)目使用中的一些總結(jié)思考,GoFrame框架下文簡(jiǎn)稱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)型。

原文鏈接:https://juejin.cn/post/7109092852101021704

欄目分類(lèi)
最近更新