redis事务管道没有执行所有事务,而是返回排队的命令

drkbr07n  于 2021-06-09  发布在  Redis
关注(0)|答案(0)|浏览(389)

当调用pipe.exec()时,go redis事务管道并没有执行所有事务,而是返回排队的命令。
(redis客户端使用:“github.com/go redis/redis/v7”导入为红色)
当key的长度大于9时,pipe.exec()返回的cmders struct是一个数组,其中第一个元素的类型为redis.statuscmd,val为“queued”,数据为“multi”。其余的元素都是redis.stringmapcmd类型。

  1. pipe := *red.Client.TxPipeline()
  2. for _, key := range keys {
  3. pipe.HGetAll(key)
  4. }
  5. cmders, err := pipe.Exec()
  6. if err != nil {
  7. return err
  8. }

其他信息/我尝试过的事情:
所有错误均为零
当len(keys)=10时,管道中的最后一个命令不执行,而是排队;cmders数组包含1redis.statuscmd和9redis.stringmapcmd结构,对应于前9个键。
增加键的数量会导致丢失更多的命令。例如,当键的长度为70时,没有为最后7个命令返回*redis.stringmapcmd结构。
在使用hdel、hget和hset时也发现了同样的问题。
在exec前后添加time.sleep()也没有改变任何东西。
最后我尝试重新排列keys数组,发现了同样的问题,最后添加到管道的命令被排队。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题