IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Redis返回(nil)在lua里是boolean类型而非nil

    hongjiang发表于 2016-10-25 16:36:13
    love 0

    Redis里执行get或hget不存在的key或field时返回值在终端显式的是”(nil)”

    127.0.0.1:6379> get notexist
    (nil)
    

    当使用lua脚本执行逻辑时,如果要判断这个值,很容易让人迷惑以为它是nil,从而导致判断不成立,实际它是一个boolean的值

    127.0.0.1:6379> eval "local v=redis.call('get',KEYS[1]); return type(v)" 1 notexist
    "boolean"
    

    所以在脚本里判断获取的结果不为空,正确的方式还有判断false的情况:

    local v=redis.call('hget',KEYS[1], ARGV[1]); 
    if (v ~= nil or (type(v) == 'boolean' and v)) then 
        return 'not-empty'; 
    end
    


沪ICP备19023445号-2号
友情链接