2017-02-08 16 views
1

Это кажется следующий Redis Lua скрипт возвращает false, а не nil, который вступает в противоречие с тем, что говорится в документе:Redis Lua скрипт redis.call («получить», «несуществующая») Возвращаемое значение

> eval "local r = redis.call('get', 'none'); if r==nil then return 42 end" 0 
(nil) 
> eval "local r = redis.call('get', 'none'); if r==false then return 42 end" 0 
(integer) 42 
> eval "local r = redis.call('get', 'none'); if not r then return 42 end" 0 
(integer) 42 

в первый eval не удалось в состоянии r==nil, то второй eval, кажется, доказывает, что возвращаемое значение false

кажется, используя not r самый безопасный вариант, у меня есть под рукой, но документация here говорит, что GET Команда возвращает nil

Это то, что все остальные наблюдали и опираясь на как факт, что проверка самый безопасный Redis Lua скрипт для команд, вернувшихся nil является использование not r?

ответ

3

Хорошо, копал глубже в documentation, Redis nil делает конвертировать false в скриптах Lua:

Redis в таблице преобразования Lua.

  • Redis целое число ответ -> Луа номер
  • Redis навалом ответ -> Луа строка
  • Redis несколько навалом ответ -> Луа таблица (может иметь другие типы данных Redis вложенными)
  • статус Redis ответ - > Lua таблица с одним нормально полем, содержащего статус
  • Redis ошибкой ответа -> Lua таблица с одним полем ERR, содержащого ошибку
  • Redis Nil насыпного ответ и Nil несколько бушелей лк ответ -> Lua ложный логический тип
+0

Хм ... Какая-то nilophobia в Redis? –