gpt4 book ai didi

go - 使用不带 WATCH 的 go-redis 包将流水线和事务都实现到 redis 集群

转载 作者:可可西里 更新时间:2023-11-01 11:13:08 25 4
gpt4 key购买 nike

我的要求是使用 go 实现连接到 redis 集群的流水线事务。我正在使用支持 redis 集群、流水线和事务的 go-redis 包。如何在不使用 go-redis 包中的 WATCH 键的情况下实现流水线事务。我还查看了包中的 Tx.Pipeline()。实现事务时是否需要 WATCH 键

最佳答案

您可能会在管道、事务(MULTI/EXEC)和集群的组合中遇到不愉快的结果。在 Redis 集群中,您将与多个服务器通信。这在这里很重要,因为流水线和 MULTI/EXEC 都是面向单节点的命令。

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

同样,MULTI 只存在于它被发送到的节点内,而不是集群范围内。因此,如果您的命令在不同节点上的 multi/exec 访问 key 中,您将无法获得可靠的交易。

它是如何显示的是未知的,因为它取决于客户端库和它所做的任何检查,例如它如何在事务 block 期间处理重定向。

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

关于go - 使用不带 WATCH 的 go-redis 包将流水线和事务都实现到 redis 集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41053692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com