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

Tam*_*mpa 4 lua redis

下面是我的lua脚本:

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

如果第一次调用时键没有退出,我不想执行第二次调用.

所以...我不知道返回值是什么.在python中,返回值为None.

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

那么......我怎么做这个是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}
Run Code Online (Sandbox Code Playgroud)

当使用nil ..

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

Jan*_*e T 11

如果在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}
Run Code Online (Sandbox Code Playgroud)

  • 嗯,我不会使用零.由于各种原因(并且取决于版本),Redis在某些情况下使用false.而不是`ckid~ = nil`你应该使用`if ckid`. (5认同)