redis如何编码长整数?
我读过redis中的一些代码,但没有找到它如何处理长整型值(例如设置mykey 123456789123456789)——我指的是不能直接存储在robj struct的ptr字段(在我的机器中为4字节)中的长整型值(例如8字节)redis如何编码长整数?,redis,Redis,我读过redis中的一些代码,但没有找到它如何处理长整型值(例如设置mykey 123456789123456789)——我指的是不能直接存储在robj struct的ptr字段(在我的机器中为4字节)中的长整型值(例如8字节) PS:我在object.c中读取了tryObjectEncoding函数的代码,但只找到了REDIS_encoding_INT数据类型的编码。事实上,redis中没有长类型。这是否意味着长度超过4字节的整数将被编码为REDIS_ENCODING_STRING?REDIS
PS:我在object.c中读取了tryObjectEncoding函数的代码,但只找到了REDIS_encoding_INT数据类型的编码。事实上,redis中没有长类型。这是否意味着长度超过4字节的整数将被编码为REDIS_ENCODING_STRING?
REDIS_ENCODING_INT
实际上表示一个8字节的数字。请参阅util.c中的方法string2l
——它尝试将字符串转换为long
换句话说,4到8字节之间的整数是使用
REDIS_ENCODING_INT
编码的,而不是默认的字符串编码。但是在object.c中的tryObjectEncoding函数中,我看到“o->ptr=(void*)value;”,一个long如何转换成void*指针而不引起精度损失呢?哦,我试着打印sizeof(long)和sizeof(void*),它们在我的机器中都是4字节。这是巧合还是某种关系?