【发布时间】:2014-11-06 04:46:52
【问题描述】:
我正在尝试编写一个非常简单的 Lua 脚本来从 node_redis 访问 redis 中的 hyperloglog 功能。我有 1 个键和多个哈希作为要传递的元素。只有当我硬编码密钥和参数时,我才能成功地做到这一点,如下所示:
脚本: 'return redis.call("pfadd", 'testkey', 'valvalval')'
虽然这很好用,但这不是很有用......
我已经尝试了所有我能想到的访问 KEYS 和 ARGV 数组的方法,这就是我目前在 .js 文件中的内容:
var script = '\
local val = 0 \
for _, hash in pairs(ARGV) do \
redis.call("pfadd", KEYS[1], hash) \
end \
return val';
然后调用我的脚本:
redisInstance.eval(script, 1, args, function (ret) {
console.log(ret);
});
args 是一个数组,如下:
['key','hash1','hash2','hash3', ...,'hash30']
回调始终为空,并且在服务器上没有设置任何键... KEYS 和 ARGV 数组未被访问...(如我所说的硬编码时,它工作正常...)
我需要将所有哈希作为元素传递(每次总共大约 30 个)并接收整数回复。
提前感谢您的帮助。
【问题讨论】:
-
什么是'1'?在 redisInstance.eval(script, 1, args, function (ret) {...} ?
-
一些快速的东西跳出来:回调有两个参数,错误和结果,而不仅仅是结果。另外,尝试像这样调用它: redisInstance.eval([script, 1, ['key'], ['hash1', 'hash2']], function(error, resp){ ... })
-
1指定键的个数。
标签: javascript node.js lua redis