首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用go-redis包实现对redis集群的流水线和事务处理

使用go-redis包实现对redis集群的流水线和事务处理
EN

Stack Overflow用户
提问于 2016-12-09 13:30:42
回答 1查看 2.3K关注 0票数 1

我的需求是使用go实现连接到redis集群的流水线事务。我使用的是go-redis包,它支持redis集群,管道和transactions.How。我不使用go-redis包中的监视键来实现流水线事务。我还研究了实现事务时所需的package.Is监视关键字中的Tx.Pipeline()

EN

回答 1

Stack Overflow用户

发布于 2016-12-09 22:35:26

结合使用管道、事务(多/执行)和集群,您可能会遇到不满意的结果。在Redis集群中,您将与多个服务器对话。这在这里很重要,因为流水线和多/EXEC都是面向单节点的命令。

流水线本质上是将一堆命令排成队列,并将它们作为单个网络调用发送到服务器。如果您的命令需要转到不同的集群节点,这将不起作用,因为您不能使用单个网络发送来发送到多个节点。

类似地,MULTI只存在于它被发送到的节点内,而不存在于整个集群范围内。因此,如果您的命令在不同节点上的多个/exec访问键中,您将不会有可靠的事务。

这是如何显示的是未知的,因为它依赖于客户端库和它所做的任何检查,比如它如何在事务块期间处理重定向。

但是,最终,如果您绝对需要流水线多/exec,您将需要使用Redis的"hashtag“方法确保所有键都在一个节点上;使用客户端代码检查所有键的位置,如果不在同一节点上则会引发错误,同时还希望在检查和命令执行之间不移动键;或者不使用cluster。在前两种情况下,您将希望使用WATCH来指定要使用的键,从而使您有机会检测插槽更改以及检测不同节点的条件。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41053692

复制
相关文章

相似问题

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