为什么Redis在lua脚本中返回布尔值?

这是我的eval命令

eval "local b = redis.call('hget', 'foo', 'baz'); if (type(b) == 'boolean') then return 'boolean' else return 'not a boolean' end" 0 "hello"

这将返回 boolean。但是如果我返回变量b的值,会得到(nil)。这是怎么回事?

原文链接 https://stackoverflow.com/questions/71033029

点赞
stackoverflow用户2858170
stackoverflow用户2858170

当哈希不包含该 field 或键不存在时,返回与该 field 关联的值,否则返回 nil。

在 Redis 和 Lua 值之间存在一些转换规则 https://cndoc.github.io/redis-doc-cn/cn/commands/eval.html

Redis 的 nil 被转换为 Lua 的 false。因此,bfalse。 因此 type(b) 是布尔类型,所以返回一个字符串 ‘boolean’

如果返回 b,则返回 false。Lua 的 false 被转换为 Redis 的 nil

2022-02-08 12:12:16