Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.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
Database redis数据是存储为sds还是对象?_Database_Dictionary_Redis_Storage - Fatal编程技术网

Database redis数据是存储为sds还是对象?

Database redis数据是存储为sds还是对象?,database,dictionary,redis,storage,Database,Dictionary,Redis,Storage,我试图了解Redis的内部结构。它使用字典的简单实现作为内存中的数据存储。此外,从客户端传输到服务器的数据由其自己的协议序列化 到目前为止,我还没有弄清楚数据是如何存储在redis中的。它是将相应的RESP值存储为(sds)还是首先将RESP中的值解析为整数并将其存储为int(可能来自共享整数数组),然后再将其存储为sds?我很好奇,因为在dict.c中,例如,intdictadd(dict*d,void*key,void*val){…}data被用作void*,这可能表示数据被存储为字符串、i

我试图了解Redis的内部结构。它使用字典的简单实现作为内存中的数据存储。此外,从客户端传输到服务器的数据由其自己的协议序列化

到目前为止,我还没有弄清楚数据是如何存储在redis中的。它是将相应的RESP值存储为(sds)还是首先将RESP中的值解析为整数并将其存储为int(可能来自共享整数数组),然后再将其存储为sds?我很好奇,因为在dict.c中,例如,
intdictadd(dict*d,void*key,void*val){…}
data被用作void*,这可能表示数据被存储为字符串、int或其他任何形式,但在跟踪它的过程中,我没有发现任何将sds转换为对象的代码


但是,如果它将数据存储为sds,那么它如何存储列表和集合呢?

Redis中的每种数据类型都有自己的编码,并且大多数数据类型都有针对不同场景的几种编码。甚至sds字符串(是的,字符串键通常是sds字符串)也可以有多个编码

集、排序集、列表和散列在较小时在内存中使用紧凑的“ziplist”编码,但当它们增长时,会转向一种浪费内存但速度更快的编码

最复杂的对象是排序集,它是skiplist和哈希表的组合。新的streams对象也有一个非常有趣的表示


但在RDB中,它们被序列化为一种紧凑的表示形式,而不是保存在内存中。

Redis中的每种数据类型都有自己的编码,并且大多数数据类型都有针对不同场景的几种编码。甚至sds字符串(是的,字符串键通常是sds字符串)也可以有多个编码

集、排序集、列表和散列在较小时在内存中使用紧凑的“ziplist”编码,但当它们增长时,会转向一种浪费内存但速度更快的编码

最复杂的对象是排序集,它是skiplist和哈希表的组合。新的streams对象也有一个非常有趣的表示


但在RDB中,它们被序列化为紧凑的表示形式,而不是保存在内存中。

谢谢,起初没有找到负责的代码。如果有人也偶然发现了这个问题,我建议读一读。这真的帮了我的忙。谢谢你,一开始没有找到负责的代码。如果有人也偶然发现了这个问题,我建议读一读。这真的帮助了我。