首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP Redis Lua的脚本问题

PHP Redis Lua的脚本问题
EN

Stack Overflow用户
提问于 2019-04-11 18:41:58
回答 1查看 267关注 0票数 0

我想使用lua脚本通过php/reids扩展来进行原子Redis操作,所以我的代码是:

代码语言:javascript
运行
复制
    $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的新手,这是我的第一个脚本。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-11 19:02:37

你的脚本有两个问题。首先,您应该使用ipairs而不是pairs来迭代数组。pairs只迭代表的关键部分,在本例中,它迭代数组索引。其次,您的HSET命令遗漏了关键部分。尝试以下代码:

代码语言:javascript
运行
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55630560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档