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 中打开 →

同一数据库的其他条目