2013-09-11 43 views
1

绝对新lua ..刚刚开始1小时前:)。我想要生成randomid并确保在redis中不存在具有相同ID的密钥。所以我必须在Lua写下面的代码独特的随机密钥redis lua脚本

local get_random_id 
get_random_id = function(id) 
    local id_exists = redis.call("EXISTS", id) 
    if id_exists == 0 then 
     return id 
    end 
    local newid = randomstring(3) 
    get_random_id(newid) 
end 

local id = randomstring(3) 
local existingid = "abc" 
return get_event_id(existingid) 

如果我通过它不存在于它返回我一个新的随机密钥Redis的关键,这工作正常。但是,如果redis中存在密钥,则返回零。

更多信息:我MONITOR Redis的,发现脚本生成的随机字符串和Redis的检查,但不知它返回nil

回答

3

你是不是从你的递归调用返回新随机ID。

将行:

get_random_id(newid) 

有:

return get_random_id(newid) 

顺便说一句,你可以只更换你的函数的定义:

local function get_random_id(id) 
    -- ... code .. 
end 

,而不是

local get_random_id 
get_random_id = function(id) 
    -- ... code .. 
end 
+0

感谢您的回复,但是如果我将回报放在那里,如果这个数字在redis中也存在?我认为我搞乱了代码的地方..我想要它产生一个随机数并检查存在于redis,直到我得到一个不存在的数字 –

+0

并顺便说一句,如果我改变函数本地函数get_random_id(id)它会产生错误“脚本试图访问未知的全局变量”作为redis解释器无法访问全局变量 –

+0

放弃我的第一条评论..可能是我正在睡觉..谢谢你的回应..它的作品:) –