【问题标题】:Error in lua-redis scriptlua-redis 脚本中的错误
【发布时间】:2013-06-18 18:32:15
【问题描述】:

我正在尝试在 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

但我收到此错误:

编译脚本时出错(新函数):user_script:20: '' 预计在 'end' 附近

我正在尝试移动这一端,制表,但我无法让它工作,对不起,如果这是一个愚蠢的问题,我对这个 lua 事情真的很陌生!

【问题讨论】:

  • 你有一个额外的end

标签: lua redis


【解决方案1】:

工作:

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 所说,你在最后还有一个额外的结尾。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 2020-11-08
    • 2016-12-22
    • 2015-06-18
    • 1970-01-01
    • 2023-02-23
    • 2021-06-27
    相关资源
    最近更新 更多