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
RedisNe demek?
Bağlantı Pub/Sub abonelik (subscribe) moduna girdikten sonra, bu modda izin verilmeyen normal bir komut (ör. GET/SET) çalıştırmaya çalıştınız. Abonelik modundaki bir bağlantı yalnızca sınırlı komutları kabul eder. Eski sürümlerde mesaj "ERR only (P)SUBSCRIBE / (P)UNSUBSCRIBE / PING / QUIT allowed in this context" biçimindeydi.
Neden olur?
SUBSCRIBE/PSUBSCRIBE/SSUBSCRIBE ile aboneliğe geçmiş bir bağlantı üzerinden veri komutu göndermek. RESP2 protokolünde abone olmuş bir bağlantı yalnızca (P|S)SUBSCRIBE, (P|S)UNSUBSCRIBE, PING, QUIT ve RESET komutlarına izin verir. Tek bir bağlantıyı hem pub/sub hem normal işler için paylaşmak tipik hatadır.
Nasıl çözülür?
Pub/Sub için ayrı bir bağlantı kullanın; normal komutlar için başka bir bağlantı açın (çoğu istemci kütüphanesi bunu otomatik yapar). Abonelikten çıkmak için UNSUBSCRIBE/PUNSUBSCRIBE gönderin, ardından normal komutlar çalışır. RESP3 protokolünde (HELLO 3) abone bağlantı üzerinde diğer komutlara da izin verilir; sürücünüz destekliyorsa RESP3'e geçebilirsiniz.
Aynı motorda diğer kayıtlar
- 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