ERR WATCH inside MULTI is not allowed: WATCH inside MULTI is not allowed
RedisQue signifie cette erreur ?
WATCH a été envoyé à l'intérieur d'un bloc MULTI ouvert. Pour le verrouillage optimiste, WATCH doit placer les clés sous surveillance AVANT le début de la transaction ; appelé après MULTI, il est refusé. L'erreur n'annule pas la transaction ; seul WATCH échoue et rien n'est surveillé.
Cause
WATCH et MULTI écrits dans l'ordre inverse dans le code (MULTI d'abord, puis WATCH) ; appel de WATCH dans le wrapper pipeline/transaction de la bibliothèque cliente ; ou utilisation d'une connexion du pool laissée en état MULTI. Dans ce cas, EXEC s'exécute même si les clés censées être surveillées ont changé ; la protection attendue contre les conflits ne s'applique pas.
Comment la corriger
Ordre correct : WATCH key -> (lecture des valeurs) -> MULTI -> commandes -> EXEC. Si EXEC renvoie nil, une clé surveillée a changé ; relancez l'opération depuis le début. Utilisez l'API WATCH/transaction de la bibliothèque cliente (par ex. helpers watch + pipeline). Remarque : les commandes pub/sub comme SUBSCRIBE ne sont pas refusées dans MULTI ; elles sont mises en file et la connexion passe en mode subscribe après EXEC ; c'est également déconseillé, utilisez une connexion dédiée au pub/sub.
Autres entrées pour ce moteur
- ERR bit offset is not an integer or out of rangeBit offset is not an integer or out of range
- ERR Protocol error: invalid multibulk lengthProtocol error: invalid multibulk length (erreur de protocole : longueur multibulk invalide)
- ERR Number of keys can't be greater than number of argsEVAL/EVALSHA: numkeys exceeds argument count (numkeys dépasse le nombre d'arguments)
- ERR WAIT cannot be used with replica instancesWAIT cannot be used with replica instances
- ERR Background append only file rewriting already in progressAOF rewrite already in progress
- IOERR error or timeout reading from target instanceMIGRATE: I/O error or timeout to target (erreur d'I/O ou timeout vers la cible)
- ERR Error compiling script (new function)Error compiling Lua script