上一篇文章为大家介绍了 GoFrame gcache使用实践 | 缓存控制 淘汰策略 ,得到了大家积极的反馈。
后续几篇文章再接再厉,仍然为大家介绍GoFrame框架缓存相关的知识点,以及自己项目使用中的一些总结思考,GoFrame框架下文简称gf。
今天重点为大家介绍:GoFrame gredis 如何优雅的取值和类型转换
取值方法
不推荐
通过客户端方法Do/Receive获取的数据都是二进制形式[]byte的,需要开发者手动进行数据转换。 不推荐大家这么取值。
推荐
gredis模块也提供了DoVar/ReceiveVar方法,用以获取可供方便转换的gvar.Var通用变量结果。
通过gvar.Var的强大转换功能可以转换为任意的数据类型,如基本数据类型:Int,String,Strings,或者结构体Struct等等。
DoVar示例
1
2
3
4
5
6
7
8
9
10
11
12
|
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 ()) //打印结果:value } |
ReceiveVar示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
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()) } } |
执行后,程序将阻塞等待获取数据。
另外打开一个终端通过redis-cli命令进入Redis Server,发布一条消息:
1
2
3
4
|
$ redis-cli 127.0 . 0.1 : 6379 > publish channel gf-test (integer) 1 127.0 . 0.1 : 6379 > |
随后程序终端立即打印出从Redis Server获取的数据:
1
|
[message channel gf-test] |
HashSet示例
小技巧
如果我们习惯使用Redis的HashSet数据结构,我们可以非常方便地将Redis中的HashSet获取并转换为Golang中的Map数据类型。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
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" , "王中阳" ) if err != nil { panic (err) } result, err = g.Redis().DoVar( "HGETALL" , key) if err != nil { panic (err) } fmt. Println (result. Map ()) //打印结果:map[id:1 name:王中阳] } |
总结
通过这篇文章我们了解到:可以使用DoVar和ReceiveVar获取可供方便转换的gvar.Var通用结果,通过gvar.Var的强大转换功能可以转换为任意的数据类型。
另外了解到一个小技巧:如果使用Redis的HashSet数据结构,我们可以非常方便地将Redis中的HashSet获取并转换为Golang中的Map数据类型。
更多关于GoFrame gredis取值类型转换的资料请关注服务器之家其它相关文章!
原文链接:https://juejin.cn/post/7109092852101021704