ERR MULTI calls can not be nested: MULTI calls can not be nested
RedisЧто это значит?
MULTI отправлен повторно, когда блок MULTI (транзакция) уже был открыт. Redis не поддерживает вложенные блоки транзакций; одновременно может быть активен только один MULTI.
Почему возникает?
Логика приложения начинает новый MULTI, не закрыв предыдущий через EXEC/DISCARD; повторное использование того же соединения из пула без корректного сброса состояния транзакции; либо обёртка библиотеки незаметно вызывает MULTI дважды.
Как исправить
Закрывайте каждый блок MULTI одним EXEC (или DISCARD для отмены) и открывайте новый блок только после завершения предыдущего. Чётко разделяйте начало и конец транзакции в потоке кода. Убедитесь, что перед возвратом соединения в пул не осталось открытой транзакции. Если нужна вложенная логика, рассмотрите выполнение атомарной операции с помощью Lua-скрипта (EVAL).
Ещё по этой СУБД
- ERR Can't save in background: fork failedBackground save failed: fork failed
- NOPROTO unsupported protocol versionUnsupported RESP protocol version
- ERR Unknown option or number of arguments for CONFIG SETUnknown option or number of arguments for CONFIG SET (older versions: Unsupported CONFIG parameter)
- ERR Lua script attempted to access nonexistent global variableLua script attempted to access a nonexistent global variable
- ERR unknown commandUnknown command
- TRYAGAIN Multiple keys request during rehashing of slotMultiple keys request during rehashing of slot (cluster)
- ERR DISCARD without MULTIDISCARD without MULTI