ERR Number of keys can't be greater than number of args: EVAL/EVALSHA: numkeys exceeds argument count(EVAL/EVALSHA:numkeys 超过参数数量)
Redis含义
运行 Lua 脚本(EVAL/EVALSHA/FCALL)时,指定的键数量(numkeys)大于实际传给命令的参数数量。Redis 无法拆分 KEYS 和 ARGV 数组,因此拒绝该命令。
原因
EVAL 的语法是 'EVAL script numkeys key [key ...] arg [arg ...]'。numkeys 值计算错误(设置过大),或预期的键从未加入命令。这是常见的编程错误。
解决方法
使 numkeys 与实际传给命令的键数量完全相等。使用客户端库的 EVAL 封装(通常将 KEYS 和 ARGV 作为单独的列表接收),以自动计算 numkeys。调用脚本时,正确地将键放入 KEYS,将其他参数放入 ARGV。
同一数据库的其他条目
- 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(位偏移量不是整数或超出范围)
- ERR Protocol error: invalid multibulk lengthProtocol error: invalid multibulk length(协议错误:无效的 multibulk 长度)
- ERR WATCH inside MULTI is not allowedWATCH inside MULTI is not allowed(不允许在 MULTI 中使用 WATCH)
- ERR WAIT cannot be used with replica instancesWAIT cannot be used with replica instances(WAIT 不能用于副本实例)
- ERR Background append only file rewriting already in progressAOF rewrite already in progress(AOF 重写已在进行中)
- IOERR error or timeout reading from target instanceMIGRATE: I/O error or timeout to target(MIGRATE:与目标之间发生 I/O 错误或超时)