Redis Lua脚本redis.call(' get',' nonxisting')返回值

时间:2017-02-08 21:16:10

标签: lua redis eval

以下Redis Lua脚本似乎返回false而不是nil,这与文档所说的内容相矛盾:

> eval "local r = redis.call('get', 'none'); if r==nil then return 42 end" 0
(nil)
> eval "local r = redis.call('get', 'none'); if r==false then return 42 end" 0
(integer) 42
> eval "local r = redis.call('get', 'none'); if not r then return 42 end" 0
(integer) 42

第一个eval在条件r==nil失败,第二个eval似乎证明返回值为false

似乎使用not r是我手边最安全的选项,但文档here表示GET命令会返回nil

这是否是其他所有人都观察到并依赖的事实,最安全的Redis Lua脚本检查返回nil的命令是使用not r

1 个答案:

答案 0 :(得分:3)

好的,在documentation深入挖掘,Redis nil确实在Lua脚本中转换为false

  

Redis到Lua转换表。

     
      
  • Redis整数回复 - > Lua号码
  •   
  • Redis批量回复 - > Lua字符串
  •   
  • Redis多批量回复 - > Lua表(可能嵌套了其他Redis数据类型)
  •   
  • Redis状态回复 - > Lua表包含一个包含状态
  • 的ok字段   
  • Redis错误回复 - >具有包含错误的单个错误字段的Lua表
  •   
  • Redis Nil批量回复和Nil多批量回复 - > Lua false布尔类型
  •