DBAtlas · Atlas d'exploitation des bases de données

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

Redis

Que signifie cette erreur ?

MULTI a été envoyé de nouveau alors qu'un bloc MULTI (transaction) était déjà ouvert. Redis ne prend pas en charge les blocs de transaction imbriqués ; un seul MULTI peut être actif à la fois.

Cause

Logique applicative qui démarre un nouveau MULTI sans fermer le précédent avec EXEC/DISCARD ; réutilisation de la même connexion d'un pool sans réinitialiser correctement l'état de transaction ; ou wrapper de bibliothèque qui appelle MULTI deux fois à votre insu.

Comment la corriger

Fermez chaque bloc MULTI par un seul EXEC (ou DISCARD pour annuler) et n'ouvrez un nouveau bloc qu'après avoir terminé le précédent. Séparez clairement le début et la fin de transaction dans le flux du code. Assurez-vous qu'aucune transaction ne reste ouverte avant de rendre une connexion au pool. Si une logique imbriquée est nécessaire, envisagez d'effectuer l'opération atomique avec un script Lua (EVAL).

Ouvrir dans DBAtlas →

Autres entrées pour ce moteur