ERR MULTI calls can not be nested: MULTI calls can not be nested(MULTI 调用不能嵌套)
Redis含义
在已打开 MULTI(事务)块的情况下再次发送了 MULTI。Redis 不支持嵌套事务块;同一时间只能有一个 MULTI 处于活动状态。
原因
应用逻辑在未用 EXEC/DISCARD 关闭前一个 MULTI 的情况下启动了新的 MULTI;从连接池复用同一连接时未正确重置事务状态;或库封装在不知情的情况下调用了两次 MULTI。
解决方法
每个 MULTI 块都用一个 EXEC(或用 DISCARD 取消)关闭,且只在前一个块结束后才打开新块。在代码流程中明确区分事务的开始和结束。确保在将连接归还连接池之前没有遗留未结束的事务。如果需要嵌套逻辑,考虑用 Lua 脚本(EVAL)完成原子操作。
同一数据库的其他条目
- ERR Can't save in background: fork failedBackground save failed: fork failed(后台保存失败:fork 失败)
- NOPROTO unsupported protocol versionUnsupported RESP protocol version(不支持的 RESP 协议版本)
- ERR Unknown option or number of arguments for CONFIG SETUnknown option or number of arguments for CONFIG SET (older versions: Unsupported CONFIG parameter)(CONFIG SET 的选项未知或参数数量错误)
- 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)(槽重新哈希期间的多键请求)
- ERR DISCARD without MULTIDISCARD without MULTI(未执行 MULTI 就调用 DISCARD)