我已经阅读了redis中的一些代码,但我没有找到它如何处理长整数值(例如SET mykey 123456789123456789)---我的意思是长整数(例如8字节)无法直接存储在ptr中robj struct的字段(我的机器中有4个字节)。
PS:我在object.c中读取了tryObjectEncoding函数的代码,但只找到了REDIS_ENCODING_INT数据类型的编码。事实上,redis并没有长期类型。这是否意味着长度超过4个字节的整数将被编码为REDIS_ENCODING_STRING?
答案 0 :(得分:3)
REDIS_ENCODING_INT
实际上代表一个8字节的数字。请参阅util.c中的方法string2l
- 它尝试将字符串转换为long long。
换句话说,使用REDIS_ENCODING_INT
编码4到8个字节的整数,而不是默认的字符串编码。