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中的?例如,它似乎支持有限数量的标量,主要的标量是。或者,数字操作是在客户机中完成的,例如: > SET id 4 >>> int(r.get(id)) + ... 为了节省内存,Redis有一个复杂的编码机制 SET命令的值为字符串类型。要在Redis中保存字符串,我们需要一个字符串的内存块,以及指向该内存块的指针。但是,如果该值可以转换为整数,Redis会将字符串值转换为整数,并使用指针保存整数。这样可以节省大量内存,即不需要为字符串

数字通常是如何存储在redis中的?例如,它似乎支持有限数量的标量,主要的标量是。或者,数字操作是在客户机中完成的,例如:

> SET id 4

>>> int(r.get(id)) + ...

为了节省内存,Redis有一个复杂的编码机制

SET
命令的值为字符串类型。要在Redis中保存字符串,我们需要一个字符串的内存块,以及指向该内存块的指针。但是,如果该值可以转换为整数,Redis会将字符串值转换为整数,并使用指针保存整数。这样可以节省大量内存,即不需要为字符串分配额外的内存块


此外,Redis为整数0到9999预分配10000个对象。如果键的值介于0到9999之间,Redis将使这些键共享该值,即指向这些预分配对象的指针,而不是为这些键创建新对象。

为了节省内存,Redis具有复杂的编码机制

SET
命令的值为字符串类型。要在Redis中保存字符串,我们需要一个字符串的内存块,以及指向该内存块的指针。但是,如果该值可以转换为整数,Redis会将字符串值转换为整数,并使用指针保存整数。这样可以节省大量内存,即不需要为字符串分配额外的内存块


此外,Redis为整数0到9999预分配10000个对象。如果键的值介于0到9999之间,Redis将使这些键共享该值,即指向这些预分配对象的指针,而不是为这些键创建新对象。

一个(可能很愚蠢)的问题——整数(int32)的大小不是比指针(我猜是8字节)小吗?那么为什么它需要共享该值呢?或者可能“value”总是一个指针,所以它并不重要(我不知道redis的内部结构)。整数的类型是
long
,即8字节,等于x64平台上指针的大小。值不是单个指针,它的类型是
redisObject
。I:heart:@for_stack的回答是一个(可能是愚蠢的)问题——整数(int32)的大小不是比指针(我猜是8字节)小吗?那么它为什么需要共享值呢?或者可能“value”总是一个指针,所以它并不重要(我不知道redis的内部结构)。整数的类型是
long
,即8字节,等于x64平台上指针的大小。值不是单个指针,它的类型为
redisObject
。I:heart:@for_stack的答案