Lua脚本和Redis - 如何测试None值

5
以下是我的Lua脚本:
     local ckid = redis.pcall('get',KEYS[1])
     local meta = redis.call('hgetall', ckid)
     return {ckid, meta}

如果第一次调用时键不存在,我不希望执行第二次调用。

那么……我不知道返回值为None的含义。在Python中,返回值将是None。

if ckid ~= '???????' then 
    local meta = redis.call('hgetall', ckid)
else
     local meta = 'empty'
retrun {ckid, meta}

那么……我该如何在lua中实现这个呢?
     local ckid = redis.pcall('get',KEYS[1])
     if ckid ~= nil then
         local meta = redis.call('hgetall', ckid)
     else
         local meta = 'none'
         local ckid = 'none'
     end

     return {ckid, meta}

When using nil..

ResponseError: ERR Error running script (call to f_1400713412b0063a26eb0dc063f53a4e3be26380): user_script:12: Script attempted to access unexisting global variable 'meta'

6
实际上,在Lua中,redis.call()返回false,而在Redis中返回nil - Luper Rouch
2个回答

11

如果你在if语句中定义一个局部变量,它只存在于该if语句中。请查看手册中的局部变量作用域。

尝试

 local ckid = redis.pcall('get',KEYS[1])
 local meta
 if ckid ~= nil then
     meta = redis.call('hgetall', ckid)
 else
     meta = 'none'
     ckid = 'none'
 end

 return {ckid, meta}

非常感谢!Lua 不是我的强项,我很渴望解决这个问题! - Tampa
7
好的,我会尽力进行翻译。根据Redis的使用情况和版本的不同,有时会在某些情况下使用false而不是nil。因此建议使用if ckid而不是ckid ~= nil。注意不要改变原意。 - catwell


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接