我想使用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的新手,这是我的第一个脚本。
答案 0 :(得分:2)
您的脚本有2个问题。首先,您应该使用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