Lua中HGETALL的返回类型是什么?

时间:2014-11-04 17:21:12

标签: lua redis

我正在写一个Lua脚本,这是我的脚本:

local session = redis.call('HGETALL', accessToken)
if (session == nil) then
  redis.log(redis.LOG_WARNING, 'Session not found : ' .. accessToken)
  return
end

我尝试了多个if条件,我无法找到如何正确验证该值是否为null。另外,我不想要之前调用EXISTS命令的开销。

我尝试通过telnet调用它,redis的响应是 * 0

这是我尝试的列表:

if (session == nil) then    
if (session == '[]') then
if (session == '{}') then
if (session == '*0') then
if (session == '') then
if (session == '(empty list or set)') then
if (not session) then

这些条件都不起作用。有人有想法吗?

2 个答案:

答案 0 :(得分:3)

在线快速搜索似乎表明HGETALL(以及返回键/值对的其他函数)的结果是一系列顺序键/值对。所以{"key1", "val1", "key2", "val2"}

这表明空结果(假设它不是nil)将是一个空表(即session[1] == nil)。

答案 1 :(得分:0)

更通用的方法,也适用于包含字符串键的表格next(table_name) == nil

您的脚本将是:

local session = redis.call('HGETALL', accessToken)
if next(session) == nil then
    redis.log(redis.LOG_WARNING, 'Session not found : ' .. accessToken)
    return
end

当然,在一般情况下,最好也检查一下nil表table_name == nil or next(table_nil)