2013-09-11 2 views
1

Абсолютно новый для lua .. только что начался 1 час назад :). Я хочу создать randomid и убедиться, что ключ с таким же идентификатором не существует в redis. Так я написал ниже код в Luaуникальный случайный ключ redis lua script

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, но как-то это возвращение всухую

ответ

3

Вы не возвращая новый случайный идентификатор из вашего рекурсивного вызова.

Заменить строку:

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

Откажитесь от моего первого комментария .. Может быть, я спал .. спасибо за ответ .. он работает :) –

Смежные вопросы