Database redis数据是存储为sds还是对象?
我试图了解Redis的内部结构。它使用字典的简单实现作为内存中的数据存储。此外,从客户端传输到服务器的数据由其自己的协议序列化 到目前为止,我还没有弄清楚数据是如何存储在redis中的。它是将相应的RESP值存储为(sds)还是首先将RESP中的值解析为整数并将其存储为int(可能来自共享整数数组),然后再将其存储为sds?我很好奇,因为在dict.c中,例如,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
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中,它们被序列化为紧凑的表示形式,而不是保存在内存中。谢谢,起初没有找到负责的代码。如果有人也偶然发现了这个问题,我建议读一读。这真的帮了我的忙。谢谢你,一开始没有找到负责的代码。如果有人也偶然发现了这个问题,我建议读一读。这真的帮助了我。