PHP Redis Lua的脚本问题

时间:2019-04-11 10:41:58

标签: redis lua phpredis

我想使用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的新手,这是我的第一个脚本。

1 个答案:

答案 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