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

3
看起来以下 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是我手头上最安全的选项,但文档hereGET命令将返回nil
这是每个人都观察到并依赖于作为事实的东西吗?最安全的Redis Lua脚本检查返回nil的命令是否使用not r
1个回答

9

文档中深入了解后,Redis的nil在Lua脚本中确实会转换为false

Redis与Lua数据类型转换表。

  • Redis整数回复 -> Lua数字
  • Redis块回复 -> Lua字符串
  • Redis多块回复 -> Lua表(可能包含其他Redis嵌套数据类型)
  • Redis状态回复 -> Lua表,其中包含一个带有状态的ok字段
  • Redis错误回复 -> Lua表,其中包含一个带有错误的err字段
  • Redis Nil块回复和Nil多块回复 -> Lua false布尔类型

1
Redis中出现了某种nilophobia? - Egor Skriptunoff
感谢您在文档中复制相关片段,因为我无法在文档中找到这些信息。有人知道现在它在哪里吗?更新链接将是很好的。 - stefansundin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接