GoFrame框架gredis优雅的取值和类型转换
作者:王中阳Go 发布时间:2024-05-22 10:29:12
标签:GoFrame,gredis,取值,类型转换
上一篇文章为大家介绍了 GoFrame gcache使用实践 | 缓存控制 淘汰策略 ,得到了大家积极的反馈。
后续几篇文章再接再厉,仍然为大家介绍GoFrame框架缓存相关的知识点,以及自己项目使用中的一些总结思考,GoFrame框架下文简称gf。
今天重点为大家介绍:GoFrame gredis 如何优雅的取值和类型转换
取值方法
不推荐
通过客户端方法Do/Receive获取的数据都是二进制形式[]byte的,需要开发者手动进行数据转换。 不推荐大家这么取值。
推荐
gredis模块也提供了DoVar/ReceiveVar方法,用以获取可供方便转换的gvar.Var通用变量结果。
通过gvar.Var的强大转换功能可以转换为任意的数据类型,如基本数据类型:Int,String,Strings,或者结构体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()) //打印结果: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())
}
}
执行后,程序将阻塞等待获取数据。
另外打开一个终端通过redis-cli命令进入Redis Server,发布一条消息:
$ redis-cli
127.0.0.1:6379> publish channel gf-test
(integer) 1
127.0.0.1:6379>
随后程序终端立即打印出从Redis Server获取的数据:
[message channel gf-test]
HashSet示例
小技巧
如果我们习惯使用Redis的HashSet数据结构,我们可以非常方便地将Redis中的HashSet获取并转换为Golang中的Map数据类型。
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:王中阳]
}
来源:https://juejin.cn/post/7109092852101021704


猜你喜欢
- 文件名称:ByVal.aspByRef.asp具体代码:<%Sub TestMain()Dim A : A=5Call TestBy(
- 什么是集合的幂集?就是原集合中所有的子集(bai包括全集du和空集)构成的集族。可数集是zhi最小的无限集; 它的幂集和实数dao集一一对应
- 写在前面Omi框架可以通过在组件上声明 data-* 把属性传递给子节点。Omi从设计之初,就是往标准的DOM标签的标准传递方式靠齐。比如:
- 本文实例讲述了js点击事件的执行过程。分享给大家供大家参考,具体如下:js事件对象event包括很多事件类型,这里用onclick事件为例,
- 今天交流会上,分享前端的开发经验,有一条虽然很快带过,但是我倒是印象蛮深刻的,就写点小结来分享一下吧。不知道是标准害了大家还是大家害了标准,
- 环境pip install opencv-python==3.4.2.16pip install opencv-contrib-python
- 简介你手中的这本《JavaScript王者归来》不仅是一本传播知识的书,更是一本求道的书。本书分为五个部分循序渐进地与读者讨论了JavaSc
- 以下为引用的内容:DROP PROCEDURE test_insert ;DELIMITER ;;CREATE PROCEDURE test
- 起源:.clearfix:after {visibility: hidden;display: block;font-size: 0;con
- 前言Python中使用SSH需要用到OpenSSH,而OpenSSH依赖于paramiko模块,而paramiko模块又依赖于pycrypt
- jsp表达式方式: <center> <table border="1"> <% for
- 在PHP中,我们不能用const直接定义数组常量,但是const可以定义字符串常量,结合eval()函数使字符串常量能执行。所以,我们可以用
- 导语前段时间有小伙伴留言说想让我带大家写写桌面小挂件,今天就满足一下留过类似言的小伙伴的请求呗~不过感觉写桌面的挂历啥的没意思,就简单带大家
- 一、前言今天有粉丝咨询了一个问题,他现在有两个列表,它们的元素都为字典,且字典都有一个key为id,现在想把这两个字典根据id合并为一个字典
- 表单输出选项{{ form.as_table }}:以表格形式加载表单元素{{ form.as_p }}:以段落形式加载表单元素{{ for
- 一、watch使用的几种方法1、 通过 watch 监听 msg 数据的变化。watch: { msg(oldVa
- 本文实例讲述了php动态生成版权所有信息的方法。分享给大家供大家参考。具体实现方法如下:function copyright($start,
- 前言这篇文章通过实例给大家讲解Python3中print带颜色输出的格式,下面话不多说了,来一起看看详细的介绍吧\033[显示方式;前景色;
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN&q
- 函数getcache,会自动建立需要的缓存。 代码如下:Function getcache(funsname,isreset,is