PHP Redis Lua 脚本问题
PHP Redis Lua s script issue
我想使用 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 的新手,这是我的第一个脚本。
你的脚本有两个问题。首先,你应该使用 ipairs
来迭代数组,而不是 pairs
。 pairs
只迭代 table 的关键部分,在这种情况下,它会迭代数组索引。其次,您的 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
我想使用 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 的新手,这是我的第一个脚本。
你的脚本有两个问题。首先,你应该使用 ipairs
来迭代数组,而不是 pairs
。 pairs
只迭代 table 的关键部分,在这种情况下,它会迭代数组索引。其次,您的 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