唯一随机键 Redis Lua 脚本。

刚刚开始学习Lua,只有一个小时 :)。我想生成随机id,确保在Redis中不存在相同id的键。所以我在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中存在对应的键,则它会返回nil。

更多信息:我在监视Redis,发现脚本正在生成随机字符串并在Redis中检查,但某种方式它会返回nil。

点赞
用户2633423
用户2633423

你的递归调用没有返回新的随机 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
2013-09-11 04:55:24