Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
redis如何编码长整数?_Redis - Fatal编程技术网

redis如何编码长整数?

redis如何编码长整数?,redis,Redis,我读过redis中的一些代码,但没有找到它如何处理长整型值(例如设置mykey 123456789123456789)——我指的是不能直接存储在robj struct的ptr字段(在我的机器中为4字节)中的长整型值(例如8字节) PS:我在object.c中读取了tryObjectEncoding函数的代码,但只找到了REDIS_encoding_INT数据类型的编码。事实上,redis中没有长类型。这是否意味着长度超过4字节的整数将被编码为REDIS_ENCODING_STRING?REDIS

我读过redis中的一些代码,但没有找到它如何处理长整型值(例如设置mykey 123456789123456789)——我指的是不能直接存储在robj struct的ptr字段(在我的机器中为4字节)中的长整型值(例如8字节)


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字节。这是巧合还是某种关系?