当调用pipe.exec()时,go redis事务管道并没有执行所有事务,而是返回排队的命令。
(redis客户端使用:“github.com/go redis/redis/v7”导入为红色)
当key的长度大于9时,pipe.exec()返回的cmders struct是一个数组,其中第一个元素的类型为redis.statuscmd,val为“queued”,数据为“multi”。其余的元素都是redis.stringmapcmd类型。
pipe := *red.Client.TxPipeline()
for _, key := range keys {
pipe.HGetAll(key)
}
cmders, err := pipe.Exec()
if err != nil {
return err
}
其他信息/我尝试过的事情:
所有错误均为零
当len(keys)=10时,管道中的最后一个命令不执行,而是排队;cmders数组包含1redis.statuscmd和9redis.stringmapcmd结构,对应于前9个键。
增加键的数量会导致丢失更多的命令。例如,当键的长度为70时,没有为最后7个命令返回*redis.stringmapcmd结构。
在使用hdel、hget和hset时也发现了同样的问题。
在exec前后添加time.sleep()也没有改变任何东西。
最后我尝试重新排列keys数组,发现了同样的问题,最后添加到管道的命令被排队。
暂无答案!
目前还没有任何答案,快来回答吧!