go - Redis 事务管道未执行所有事务,而是返回 QUEUED 命令
问题描述
Go redis 事务管道,不执行所有事务,而是在调用 pipe.Exec() 时返回 QUEUED 命令。
(使用的Redis客户端:“github.com/go-redis/redis/v7”导入为红色)
当键的长度 > 9 时,pipe.Exec() 返回的 cmders 结构是一个数组,其中第一个元素的类型为 *redis.StatusCmd,val 为“QUEUED”,数据为“multi”。正如预期的那样,其余元素的类型为 *redis.StringStringMapCmd。
pipe := *red.Client.TxPipeline()
for _, key := range keys {
pipe.HGetAll(key)
}
cmders, err := pipe.Exec()
if err != nil {
return err
}
附加信息/我尝试过的事情:
所有错误为零
当 len(keys) = 10 时,管道中的最后一个命令没有被执行,而是被排队;cmders 数组包含对应于前 9 个键的 1 个 *redis.StatusCmd 和 9 个 *redis.StringStringMapCmd 结构。
增加键的数量会导致更多的命令被遗漏。例如,当键的长度为 70 时,最后 7 个命令没有返回 *redis.StringStringMapCmd 结构。
在使用 HDEL、HGET 和 HSET 时发现了同样的问题。
在 Exec 之前和之后添加 time.Sleep() 也没有改变任何东西。
最后我尝试重新排列键数组并发现同样的问题,添加到管道的最后一个命令是 QUEUED。
解决方案
推荐阅读
- memory - AccessSize 在 ASAN 检测代码中的重要性
- loops - 在 Raku 的内部循环中使用循环的位置参数
- mysql - 连接两个表时的MySQL案例
- mysql - 左连接中的多行导致重复数据
- c# - Xamarin.Forms 验证 web 视图中的文本字段以显示 iOS 原生弹出窗口
- php - 谷歌验证码 v2。我的表格不起作用
- javascript - 将 react-router-dom 的链接传递到外部库
- c# - Windows 服务无法启动 - 错误 1053
- flutter - Material Widget 有什么用?
- installation - 在本地安装 Eclipse CHe 时遇到问题