ERR Can't execute '<cmd>': only (P|S)SUBSCRIBE / (P|S)UNSUBSCRIBE / PING / QUIT / RESET are allowed in this context: Command not allowed in subscribe context
RedisWas bedeutet das?
Nachdem die Verbindung in den Pub/Sub-Subscribe-Modus gewechselt ist, wolltest du einen normalen Befehl (z. B. GET/SET) ausführen, der in diesem Modus nicht erlaubt ist. Eine Verbindung im Subscribe-Modus akzeptiert nur eine begrenzte Menge an Befehlen. In älteren Versionen lautete die Meldung "ERR only (P)SUBSCRIBE / (P)UNSUBSCRIBE / PING / QUIT allowed in this context".
Ursache
Senden von Datenbefehlen über eine Verbindung, die mit SUBSCRIBE/PSUBSCRIBE/SSUBSCRIBE in den Subscribe-Modus gewechselt ist. Im RESP2-Protokoll erlaubt eine abonnierte Verbindung nur (P|S)SUBSCRIBE, (P|S)UNSUBSCRIBE, PING, QUIT und RESET. Der typische Fehler ist, eine einzige Verbindung für Pub/Sub und normale Arbeit gemeinsam zu nutzen.
Lösung
Nutze eine eigene Verbindung für Pub/Sub und öffne eine weitere für normale Befehle (die meisten Client-Bibliotheken tun das automatisch). Sende UNSUBSCRIBE/PUNSUBSCRIBE, um den Subscribe-Modus zu verlassen; danach funktionieren normale Befehle. Im RESP3-Protokoll (HELLO 3) sind auf einer abonnierten Verbindung auch andere Befehle erlaubt; wechsle zu RESP3, wenn dein Treiber es unterstützt.
Weitere Einträge zu dieser Datenbank
- NOGROUP No such key or consumer groupNo such key or consumer group in stream
- NOTBUSY No scripts in execution right nowNo scripts in execution right now
- DENIED Redis is running in protected modeRedis is running in protected mode
- ERR SELECT is not allowed in cluster modeSELECT is not allowed in cluster mode
- ERR wrong number of arguments for commandWrong number of arguments for command
- ERR Background save already in progressBackground save already in progress
- ERR bit offset is not an integer or out of rangeBit offset is not an integer or out of range