gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 11:12:53 25 4
gpt4 key购买 nike

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

我至今没有搞清楚的是redis是如何存储数据的。它是否将相应的 RESP 值存储为 simple dynamic string (sds) 还是它首先解析来自 RESP 的值,例如。作为一个整数并将其存储为一个 int (可能来自共享整数数组),这又是一个 sds 吗?我很好奇,因为在 dict.c 例如int dictAdd(dict *d, void *key, void *val){...} 数据用作 void *,这可能表明数据存储为字符串、整数或其他任何形式,但是一直追下去,没有找到任何将 sds 转换为对象的代码。

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

最佳答案

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

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

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

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

关于database - redis数据是存储为sds还是对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48057733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com