为什么键的编码在Redis中为“ int”,而在lua脚本中其类型为“ string”?

时间:2019-04-08 09:38:20

标签: redis

当我在Redis中使用lua脚本时,遇到了一个我无法理解的问题。

例如,我有一个键“ test”,其值为2,其编码为int:

127.0.0.1:6379> set test 2
OK
127.0.0.1:6379> object encoding test
"int"

但是当我在lua脚本中使用键时,它在lua中的类型变为字符串:

127.0.0.1:6379> eval "local a = redis.call('get', 'test'); return type(a);" 0
"string"

为什么redis在lua中将int编码密钥转换为字符串?

1 个答案:

答案 0 :(得分:2)

SET命令的值类型为STRING,尽管其内部编码为INT(为了提高内存和性能)。

实际上,基于Redis protocol,有5种返回类型。您可以检查the manual中每个命令的返回类型。还要检查conversion between Lua and Redis data types