Redis Lua脚本Redis.call(';get';,';不存在';)返回值
以下Redis Lua脚本似乎返回的是Redis Lua脚本Redis.call(';get';,';不存在';)返回值,lua,redis,eval,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 = redi
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
使用notr
似乎是我手头上最安全的选择,但是文档中说GET
命令将返回nil
其他人是否已经观察到并依赖于这样一个事实:检查返回nil
的命令的最安全的Redis Lua脚本是使用而不是r
?好的,深入研究,Redisnil
在Lua脚本中转换为false
:
Redis到Lua转换表
- Redis整数回复->Lua数字
- Redis批量回复->Lua字符串
- Redis多批量回复->Lua表(可能嵌套了其他Redis数据类型)
- Redis status reply->Lua表格,带有一个包含状态的ok字段
- Redis error reply->Lua表,带有一个包含错误的err字段
- Redis Nil批量回复和Nil多批量回复->Lua假布尔类型
隐马尔可夫模型。。。Redis里的某种恐尼症?