Redis数字类型
数字通常是如何存储在redis中的?例如,它似乎支持有限数量的标量,主要的标量是。或者,数字操作是在客户机中完成的,例如:Redis数字类型,redis,Redis,数字通常是如何存储在redis中的?例如,它似乎支持有限数量的标量,主要的标量是。或者,数字操作是在客户机中完成的,例如: > SET id 4 >>> int(r.get(id)) + ... 为了节省内存,Redis有一个复杂的编码机制 SET命令的值为字符串类型。要在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的答案