2013-09-11 45 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

放棄我的第一條評論..可能是我正在睡覺..謝謝你的迴應..它的作品:) –