Redis数据结构-链表
来源:互联网 发布:四年级数学优化 编辑:程序博客网 时间:2024/05/19 15:22
链表
链表提供了高效的节点重排能力,以及顺序性的节点访问方式,可以通过增删节点来灵活的调整链表的长度。在Redis中的应用非常广泛,比如列表键的底层实现之一就是链表。当一个列表键包含了数量比较多的元素,或者列表中包含的元素都是比较长的字符串时,Redis就会使用链表作为列表键的底层实现。发布订阅、慢查询、监视器等功能都用到了链表。Redis服务器本身还是用链表来保存多个客户端的状态信息,以及使用链表来构建客户端输出缓冲区。
链表和链表节点的实现
每个链表节点使用一个adlist.h/listNode结构表示:
typedef struct listNode{ //前置节点 struct listNode *prev; //后置节点 struct listNode *next; //节点的值 void *value;}listNode;
使用多个listNode可以做成双链表,定义在adlist.h/list下:
typedef sturct list{ //表头结点 listNode *head; //表尾节点 listNode *tail; //链表包含的节点数 unsigned long len; //节点复制函数 void *(*dup) (void *prt); //节点值释放函数 void (*free) (void *prt); //节点值对比函数 int (*match) (void *prt,void *key);}list;
Redis链表特性:
- 双端:链表节点带有prev和next指针,获取某个节点的前置和后置节点的复杂度为O(1)
- 无环:表头节点的prev指针和表尾节点的next指针指向NULL,对链表访问以NULL为终点。
- 带表头指针和表尾指针:获取链表头尾节点的复杂度为O(1)
- 带链表长度计数器:获取节点数目复杂度为O(1)
- 多态:链表节点通过使用void* 指针保存节点值,可以通过list结构的dup、free、match三个属性为节点值设置类型特定函数,可以用于保存不用类型的值.
阅读全文
0 0
- 【Redis基本数据结构】链表
- Redis-数据结构-2-链表
- Redis数据结构-链表
- redis数据结构
- Redis 数据结构
- redis数据结构
- redis数据结构
- Redis数据结构
- Redis数据结构
- Redis 数据结构
- redis 数据结构
- redis数据结构
- redis数据结构
- Redis数据结构
- Redis 数据结构
- redis数据结构
- redis数据结构
- redis 数据结构
- java之类
- Python爬虫Selenium安装
- Windows Server 2016设置网卡的顺序
- java的设计模式
- spark job server on Spark1.6.0-CDH5.11.0初步使用
- Redis数据结构-链表
- ZigBee CC2530 Z-Stack 27 终端设备低功耗模式与电池寿命1-理论
- 将“hello world” 输出为“world hello”
- POJ
- C语言实现矩阵的转置
- Titanic: Machine Learning from Disaster
- mysql 存储过程(临时表、循环、游标综合运用)
- 07_
- WindowsError的错误代码详解