lua-redis 脚本中发生错误。

我正在尝试在 Redis 中运行以下 Lua 脚本:

for j=0,5000 do
    local i=redis.pcall('incr', 'SS:'..ARGV[2])%5000
    if redis.pcall('sismember', 'S:', i)==0 then
        if i > 4999 then
            redis.pcall('set', "SS:"..ARGV[2], 1)
            i = 1
        end
    end
        if redis.pcall('get', 'SS:'..ARGV[2])>4 then
            return 'forbiden'
        end
        redis.pcall('incr', 'C:'..ARGV[1])
        redis.pcall('sadd', 'US:'..ARGV[2], ARGV[1]..':'..i)
        redis.pcall('sadd', 'U:'..ARGV[1], ARGV[2]..':'..i)
        redis.pcall('sadd', 'S:'..ARGV[2], i)
        return i
    end
end
return false

但是我遇到了以下错误:

Error compiling script (new function): user_script:20: '' expected near 'end'

我尝试移动这个 end、缩进,但我无法使它正常工作。如果这是个愚蠢的问题,请谅解,我真的很新在 Lua 这方面!

点赞
用户392975
用户392975

以下是中文翻译,同时保留markdown格式

工作中:

for j=0,5000 do
    local i=redis.pcall('incr', 'SS:'..ARGV[2])%5000
    if redis.pcall('sismember', 'S:', i)==0 then
        if i > 4999 then
            redis.pcall('set', "SS:"..ARGV[2], 1)
            i = 1
        end
    end
    if redis.pcall('get', 'SS:'..ARGV[2])>4 then
        return 'forbiden'
    end
    redis.pcall('incr', 'C:'..ARGV[1])
    redis.pcall('sadd', 'US:'..ARGV[2], ARGV[1]..':'..i)
    redis.pcall('sadd', 'U:'..ARGV[1], ARGV[2]..':'..i)
    redis.pcall('sadd', 'S:'..ARGV[2], i)
    return i
end
return false

根据@karthikr所说,你最后多了一个end。

2013-06-18 19:33:50