首页 > 编程知识 正文

redis zset数据结构,redis5种数据结构

时间:2023-05-04 13:34:25 阅读:31322 作者:2937

上一个博客Redis数据结构SDS介绍了Redis的简单动态字符串(SDS ),今天介绍了Redis的链接列表。

在实际说明Redis的linkedlist是如何实现的之前,您可以使用前面写的双向链表轻松进入双向链表。

版本: 3.0结构已在版本3.0的Redis源代码中进行了分析。 这个博客的配图来自Redis设计和实现写真集。

直接看看往常的规则,源代码吧。 地址: 3.0/src/adlist.h

节点首先说明构成链表的基础部分,对应于adlist.h的listNode :

类型结构列表{//前体节点结构列表* prev; //继承节点结构列表下一步; //节点值void *value; } listNode; 如上代码所示,一个节点有三个重要部分:前驱节点、后继节点和节点值。 双向链表中的ADT如上所示。 多个节点构成双向链表,如下图所示。

你认为到此为止,上图所示的链表就形成了吗? 不,我们才刚刚开始。

以下代码与adlist.h中的list相对应:

类型定义结构列表//头; //末尾节点listNode *tail; 如何复制//节点值void*(dup ) ) void *ptr ); //清空节点值的方法void (自由) ) void (ptr ); 用于比较//节点值的方法int (*匹配) ) void *ptr,void *key ); //链表的节点数unsigned long len; (}列表; 大致的图如下。

这个时候,我发现不是。 我们的普通链表一般不是由多个节点组成的吗? Redis的链表中为什么还保存头节点、尾节点和当前链表中的节点数呢?

分析前面提到的算法的时间复杂度和算法的空间复杂度,不是有在空间上改变时间的想法吗?

这个时候就是空间转换时间的具体表现。 我使用专用空间保存当前链表的头节点、当前链表的尾节点和当前链表的节点数。 就像刚才提到的线性列表吗? 获取某个头节点、尾节点和当前节点数的时间复杂度为o(1)。

版本: 3.2接下来写……(整理3.0的相关源代码,然后开始解读整理3.2源代码) ) ) ) )。

关联阅读Redis基础

Redis数据结构SDS

Redis数据结构链接列表

Redis数据结构hashtable

Redis数据结构skiplist

Redis数据结构压缩列表

Redis数据结构intset

Redis数据结构快速列表

Redis对象RedisObject

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。