DBAtlas · Atlas de operaciones de bases de datos

ERR MULTI calls can not be nested: MULTI calls can not be nested

Redis

¿Qué significa?

Se envió MULTI de nuevo mientras ya había un bloque MULTI (transacción) abierto. Redis no admite bloques de transacción anidados; solo puede haber un MULTI activo a la vez.

¿Por qué ocurre?

La lógica de la aplicación inicia un nuevo MULTI sin cerrar el anterior con EXEC/DISCARD; se reutiliza la misma conexión de un pool de conexiones sin restablecer correctamente el estado de la transacción; o un wrapper de biblioteca llama a MULTI dos veces sin saberlo.

Cómo solucionarlo

Cierre cada bloque MULTI con un único EXEC (o DISCARD para cancelar) y abra un nuevo bloque solo después de terminar el anterior. Separe claramente el inicio y el fin de la transacción en el flujo del código. Asegúrese de que no quede ninguna transacción abierta antes de devolver una conexión al pool. Si se necesita lógica anidada, considere realizar la operación atómica con un script Lua (EVAL).

Abrir en DBAtlas →

Más entradas de este motor