Go Redis事务管道没有执行所有事务,而是返回排队命令
Go redis事务管道,不执行所有事务,而是在调用pipe.Exec()时返回排队命令 (Redis客户端使用:“github.com/go-Redis/Redis/v7”导入为红色) 当键的长度>9时,pipe.Exec()返回的cmders结构是一个数组,其中第一个元素的类型为*redis.StatusCmd,val为“QUEUED”,数据为“multi”。其余元素的类型为*redis.stringmapcmd,如预期的那样Go Redis事务管道没有执行所有事务,而是返回排队命令,go,redis,transactions,Go,Redis,Transactions,Go redis事务管道,不执行所有事务,而是在调用pipe.Exec()时返回排队命令 (Redis客户端使用:“github.com/go-Redis/Redis/v7”导入为红色) 当键的长度>9时,pipe.Exec()返回的cmders结构是一个数组,其中第一个元素的类型为*redis.StatusCmd,val为“QUEUED”,数据为“multi”。其余元素的类型为*redis.stringmapcmd,如预期的那样 pipe := *red.Client.TxPipeli
pipe := *red.Client.TxPipeline()
for _, key := range keys {
pipe.HGetAll(key)
}
cmders, err := pipe.Exec()
if err != nil {
return err
}
其他信息/我尝试过的事情:
- 所有错误均为零
- 当len(keys)=10时,管道中的最后一个命令不执行,而是排队;cmders数组包含1*redis.StatusCmd和9*redis.StringMapCmd结构,对应于前9个键
- 增加关键点的数量会导致丢失更多的命令。 例如,当键的长度为70时,没有 *为最后7个命令返回的redis.stringmapcmd结构
- 在使用HDEL、HGET和HSET时,发现同样的问题
- 在Exec之前和之后添加time.Sleep()没有改变 任何事都可以
- 最后,我尝试重新排列keys数组并找到了相同的结果 问题,添加到管道的最后一个命令已排队