错误:在 LUA 脚本中,从 redis.call('zcard','myzset') 得到的值不是整数或超出范围。

我在一个从node.js运行的lua脚本中有这段代码。

local stats = {};
stats['orders'] = redis.call('zcard','jobs');

return cjson.encode(stats)

这返回错误信息:

Error: ERR value is not an integer or out of range

但是,当我从CLI运行zcard jobs时,返回的是一个整数。

点赞
用户2759336
用户2759336

你的 Lua 脚本很好,不过要把分号扔掉,因为 Lua 不需要。

测试:

redis-cli -p 14130 eval "local stats = {} \
stats['orders'] = redis.call('zcard','azbp.d') \
return cjson.encode(stats)" 0

结果:

"{\"orders\":10424}"

我猜你在客户端调用时出了问题。你传递给 EVALEVALSHA 的第一个参数应该是参数的数量。在这个例子中,你必须传递 0。当然,这只是猜测。

希望这有所帮助,TW

2014-03-13 20:38:37