ERR DISCARD without MULTI: DISCARD without MULTI(未执行 MULTI 就调用 DISCARD)
Redis含义
在没有打开 MULTI 块的情况下发送了 DISCARD。DISCARD 仅用于取消正在进行的事务;没有可取消的内容时返回此错误。
原因
在没有 MULTI 的情况下调用 DISCARD,或在事务已用 EXEC/DISCARD 关闭后再次调用;错误处理代码中无条件调用 DISCARD;或连接状态与预期不同(从连接池取出的连接上并没有打开 MULTI)。
解决方法
仅在确实打开了 MULTI 时才调用 DISCARD;在代码中跟踪事务状态。在错误处理程序中,调用 DISCARD 之前检查是否有打开的事务。使用库提供的事务封装,由其自动管理状态。保证连接池中的连接状态干净。
同一数据库的其他条目
- ERR Lua script attempted to access nonexistent global variableLua script attempted to access a nonexistent global variable(Lua 脚本试图访问不存在的全局变量)
- ERR unknown commandUnknown command(未知命令)
- TRYAGAIN Multiple keys request during rehashing of slotMultiple keys request during rehashing of slot (cluster)(槽重新哈希期间的多键请求)
- BUSYGROUP Consumer Group name already existsConsumer group already exists(消费者组已存在)
- NOGROUP No such key or consumer groupNo such key or consumer group in stream(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(Redis 正以保护模式运行)