gpt4 book ai didi

linked-list - Redis 数据结构空间要求

转载 作者:IT王子 更新时间:2023-10-29 06:01:08 24 4
gpt4 key购买 nike

redis中sorted sets和lists在空间上有什么区别?我的猜测是排序集是某种平衡二叉树,列表是链表。这意味着除了我为它们中的每一个编码的三个值之外,key、score、value,尽管我会为链表拼凑 score 和 value,开销是链表需要跟踪一个其他节点,二叉树需要跟踪两个,因此使用有序集合的空间开销为 O(N)。

如果我的value,score都是long,指向其他节点的指针也是long,那么在64位的电脑上,单个节点的空间开销好像从3个long变成了4个long,就是空间增加 33%。

这是真的吗?

最佳答案

这远远超出您的估计。假设未使用 ziplist(即您有大量项目)。

Redis 列表是经典的双链表:每个项目 3 个指针(上一个、下一个、值)。

有序集是字典加上跳表。在字典中,项目也将使用 3 个指针(键、值、下一个)存储。跳表内存占用评估起来更复杂:每个节点占用 1 个 double (分数)、2 个指针(obj、向后),加上 n 对(指针、跨度值),其中 n 在 1 到 32 之间。大多数项目只占用 1 个或 2 对夫妇。

换句话说,当它不表示为 ziplist 时,有序集是迄今为止开销最大的 Redis 数据结构。与列表相比,内存开销超过 200%(即 3 倍)。

注意:使用 Redis 评估内存消耗的最佳方法是尝试使用伪数据构建一个大列表或排序集,并使用 INFO 获取内存占用量。

关于linked-list - Redis 数据结构空间要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12269429/

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