链表在redis的运用:列表键、发布与订阅、慢查询、监视器、保存多个客户端的状态信息、构建客户端输出缓冲区等
链表定义
链表单个节点
typedef struct listNode{
struct lsitNode* pre;
struct lsitNode* next;
void * value;
}listNode链表
typedef struct list{
listNode * head;
listNode * tail;
unsigned long len;//链表所包含的节点数量
//节点值复制函数
void*(*dup)(void *ptr);
//节点值释放函数
void (*free)(void *ptr);
//节点值对比函数
int(*macth)(void *ptr,void * key);
}list;redis链表特性
- 双端:每个链表都有前驱和后继,获取前一个节点或者后一个节点时间复杂度为O(1);
- 无环:表头的前驱和表尾的后继指向NULL,对链表的访问以NULL为终点;
- 带表头指针和表尾指针:程序获取表头节点和表尾节点的时间复杂度为O(1);
- 带链表的长度计数器:程序获取链表长度的时间复杂度为O(1);
- 多态:链表节点使用void*指针来保存节点值,并且可以通过list结构的dup、free、match三个属性为节点值设置类型特定函数,所以链表可以用于保存各种不同类型的值;
链表操作API

版权声明:本文为lq_bog原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。