【问题标题】:Lua script and redis - how to test for None valueLua 脚本和 redis - 如何测试 None 值
【发布时间】:2012-10-23 18:48:54
【问题描述】:

下面是我的 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}

当使用 nil..

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

【问题讨论】:

  • 其实redis.call()在lua中返回false,在redis中返回nil

标签: lua redis


【解决方案1】:

如果你在 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 不是我的强项,我急于解决这个问题!
  • 嗯,我不会使用 nil。 Redis 在某些情况下使用 false ,原因有很多(并且取决于版本)。而不是ckid ~= nil,你应该使用if ckid
【解决方案2】:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-28
  • 1970-01-01
  • 1970-01-01
  • 2020-03-18
  • 2017-06-26
  • 2014-02-14
  • 2015-10-27
相关资源
最近更新 更多