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

以下是我的lua脚本:

     local ckid = redis.pcall('get',KEYS[1])
     local meta = redis.call('hgetall', ckid)
     return {ckid, meta}

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

所以……我不知道没有值的返回值是什么。在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}

使用nil时:

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

nil 是在手册中提到的最早的一个元素。查看手册

2012-11-03 06:37:05
用户438753
用户438753

如果您在if语句中定义了一个Local变量,它只会存在于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}
2012-11-03 07:30:00