首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redigo多个请求

Redigo多个请求
EN

Stack Overflow用户
提问于 2015-05-29 08:39:20
回答 2查看 6.7K关注 0票数 6

我曾经使用过这样的方法:

代码语言:javascript
复制
data, err := redis.Bytes(c.Do("GET", key))

以确保返回的数据是字节的一部分。

但是,我现在需要在Redis请求中添加一个额外的命令,这样我就有了如下所示:

代码语言:javascript
复制
c.Send("MULTI")
c.Send("GET", key)
c.Send("EXPIRE", key)
r, err := c.Do("EXEC")

但是现在我似乎不能让GET命令返回一个字节片段。我尝试过像下面这样添加redis.Bytes,但是没有任何进展。

代码语言:javascript
复制
c.Send("MULTI")
redis.Bytes(c.Send("GET", key))
c.Send("EXPIRE", key)
r, err := c.Do("EXEC")
EN

回答 2

Stack Overflow用户

发布于 2015-12-02 03:04:09

在redis中,EXEC命令返回一个数组,其中包含事务中所有命令的结果。

redigo提供了一个Values函数,它将数组命令应答转换为[]interface{}

代码语言:javascript
复制
c.Send("MULTI")
c.Send("GET", key)
c.Send("EXPIRE", key)
r, err := redis.Values(c.Do("EXEC"))

r[0]现在已经将来自GET命令的答复作为interface{},因此您需要执行类型断言来获取所期望的字节片段:

代码语言:javascript
复制
data := r[0].([]byte)

参考资料

票数 6
EN

Stack Overflow用户

发布于 2015-05-29 08:56:41

MULTI通过创建事务,以原子方式向Redis发送多个命令。这根本不是管道。

EXEC调用之前,不会实际执行任何命令,因此当您从事务中调用GET时,不可能获得该值。

从医生那里:

当Redis连接位于多个请求的上下文中时,所有命令都将使用排队的字符串(从Redis协议的角度作为状态回复发送)。在调用EXEC时,只需调度队列命令即可执行。

在redigo中,流水线是以不同的方式完成的:

http://godoc.org/github.com/garyburd/redigo/redis#hdr-Pipelining

您想要做的是这样的事情(未经测试):

代码语言:javascript
复制
c.Send("GET", key)
c.Send("EXPIRE", key)
c.Flush()
v := redis.Bytes(c.Receive()) // reply from GET
_, err = c.Receive() // reply from EXPIRE
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30525005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档