因为C语言没有内置链表这种数据结构,所以Redis构建了自己的链表实现。列表键的底层实现之一就是链表。当一个列表键包含了数量比较多的元素,又或者列表中包含的元素都是比较长的字符串时,Redis就会使用链表作为列表键的底层实现。
链表节点数据结构:
typedef struct listNode {
struct listNode *prev; // 前置节点
struct listNode *next; // 后置节点
void *value; // 节点的值
}listNode;
虽然使用多个listNode结构就可以组成链表,但使用list来持有链表的话,操作起来会更方便。
链表数据结构:
typedef struct list {
listNode *head; // 表头节点
listNode *tail; // 表尾节点
unsigned long len; // 链表所包含的节点数量
void *(*dup) (void *ptr);
void *(*free) (void *ptr);
int (*match)(void *ptr,void *key);
}list;
list结构为链表提供了表头指针head、表尾指针tail,以及链表长度计数器len,而dup、free和match成员则是用于实现多态链表所需的类型特定函数:
最后,欢迎关注我的个人公众号 CodingCode,会不定期更新学习笔记,也欢迎公众号私信,一定知无不言,言无不尽。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。