以下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
?
答案 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布尔类型