当我在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编码密钥转换为字符串?
答案 0 :(得分:2)
SET
命令的值类型为STRING,尽管其内部编码为INT(为了提高内存和性能)。
实际上,基于Redis protocol,有5种返回类型。您可以检查the manual中每个命令的返回类型。还要检查conversion between Lua and Redis data types。