我想使用lua脚本通过php/reids扩展来进行原子Redis操作,所以我的代码是:
$command = "
local hashes = redis.call('smembers', ARGV[1])
for hash in pairs(hashes) do
local keys = redis.call('hkeys', hash)
for key in pairs(keys) do
redis.call('hset', key, 0)
end
end
return 1
";
$result = $this->redisClient->evaluate($command, [self::ALL_HASHES]);
这个脚本应该从self::ALL_HASHES
集合中获取所有可用的散列,循环遍历每个散列,并将每个散列键的值设置为0。脚本正在传递,并且$error = $this->redisClient->getLastError();
为null
,但值不是0。我哪里做错了?我是Lua的新手,这是我的第一个脚本。
发布于 2019-04-11 19:02:37
你的脚本有两个问题。首先,您应该使用ipairs
而不是pairs
来迭代数组。pairs
只迭代表的关键部分,在本例中,它迭代数组索引。其次,您的HSET
命令遗漏了关键部分。尝试以下代码:
local hashes = redis.call('smembers', ARGV[1])
for i, hash in ipairs(hashes) do
local keys = redis.call('hkeys', hash)
for j, key in ipairs(keys) do
redis.call('hset', hash, key, 0)
end
end
return 1
https://stackoverflow.com/questions/55630560
复制相似问题