Go redis конвейер транзакций, не выполняет все транзакции и вместо этого возвращает команды QUEUED при вызове pipe.Exe c ().
(используется клиент Redis: "github.com/go -redis / redis / v7 "импортировано как красный)
Когда длина ключей> 9, структура cmders из pipe.Exe c () возвращает массив, в котором первый элемент имеет тип * redis.StatusCmd, с значением "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 (ключи) = 10 последняя команда в конвейере не выполняется и вместо этого QUEUED; массив cmders содержал 1 * структуры redis.StatusCmd и 9 * структуры redis.StringStringMapCmd, соответствующие первым 9 клавишам.
Увеличение количества клавиш приводит к пропуску большего количества команд. Например, когда длина ключей была 70, для последних 7 команд не было возвращено никаких структур * redis.StringStringMapCmd.
Та же проблема была обнаружена при использовании HDEL, HGET и HSET.
Добавление time.Sleep () до и после Exe c также ничего не изменило.
Наконец я попытался переставить массив ключей и обнаружил ту же проблему, последняя команда, добавленная в конвейер, была QUEUED.