首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >redis数据是以sds或对象的形式存储的吗?

redis数据是以sds或对象的形式存储的吗?
EN

Stack Overflow用户
提问于 2018-01-02 08:25:19
回答 1查看 163关注 0票数 0

我在试着理解雷迪斯的内心世界。它使用字典的简单实现作为内存中的数据存储。此外,从客户端传输到服务器的数据由其自己的RESP协议序列化。

到目前为止,我还没有弄清楚数据是如何存储在redis中的。它是否将相应的RESP值存储为简单动态字符串 (sds),还是首先解析来自RESP的值。作为一个整数并将其存储为int (可能来自共享整数数组),然后哪个又是一个sds?我很好奇,因为在auto.c中,int dictAdd(dict *d, void *key, void *val){...}数据被用作void *,这可能表明数据存储为string、int或其他任何东西,但是跟踪它时,我没有找到任何将sds转换为对象的代码。

但是,如果它将数据存储为sds,它如何存储列表和设置?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-02 08:53:13

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

集合、排序集、列表和散列在内存中小的时候使用紧凑的"ziplist“编码,但是当它们增长时移动到内存浪费更快的编码。

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48057733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档