DBAtlas · Атлас эксплуатации баз данных

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

Redis

Что это значит?

После перехода соединения в режим подписки Pub/Sub вы попытались выполнить обычную команду (например, GET/SET), которая в этом режиме не разрешена. Соединение в режиме подписки принимает лишь ограниченный набор команд. В старых версиях сообщение было "ERR only (P)SUBSCRIBE / (P)UNSUBSCRIBE / PING / QUIT allowed in this context".

Почему возникает?

Отправка команд работы с данными по соединению, перешедшему в режим подписки с помощью SUBSCRIBE/PSUBSCRIBE/SSUBSCRIBE. В протоколе RESP2 подписанное соединение допускает только (P|S)SUBSCRIBE, (P|S)UNSUBSCRIBE, PING, QUIT и RESET. Типичная ошибка — использование одного соединения и для pub/sub, и для обычной работы.

Как исправить

Используйте выделенное соединение для Pub/Sub и откройте другое для обычных команд (большинство клиентских библиотек делают это автоматически). Отправьте UNSUBSCRIBE/PUNSUBSCRIBE, чтобы выйти из режима подписки; после этого обычные команды работают. В протоколе RESP3 (HELLO 3) на подписанном соединении разрешены и другие команды; перейдите на RESP3, если ваш драйвер это поддерживает.

Открыть в DBAtlas →

Ещё по этой СУБД