redis源码解析(二):链表

本文介绍了Redis中链表的数据结构,它是一个双端链表,允许在表头和表尾进行数据插入。链表节点通过void*value存储数据,支持存储任意类型。此外,文章还提及了链表的迭代器结构,提供了从表头到表尾的迭代功能。通过listGetIterator和listNext等函数,可以方便地遍历链表。
摘要由CSDN通过智能技术生成

引言

redis的链表和我们数据结构中学学过的链表并没有什么太大区别,唯一不同的地方就是redis链表是通过一个void *value来保存数据,因此redis中 的链表能够存储任意类型的数据。

redis中链表的实现

redis中的链表其实是个双端链表,能够在链表的表头和表尾插入数据。链表的定义如下图所示:
链表节点的定义
链表的定义
此处list结构体相当于链表的表头节点,拥有head和tail字段分别指向链表的表头与表尾,同时
有三个函数指针提供三种对链表节点操作的方法。(这里设置函数指针的原因是因为listNode中存储数据用的是void *value,因为在实际使用的时候需要重写这三个函数,完成数据格式的转换。)链表具体结构如下:
redis链表结构

迭代器必然也不可或缺,其结构如下图所示:
redis链表迭代器
redis可以通过以下函数通过迭代器对链表进行遍历。

/* Directions for iterators 
 *
 * 迭代器进行迭代的方向
 */
// 从表头向表尾进行迭代
#define AL_START_HEAD 0
// 从表尾到表头进行迭代
#define AL_START_TAIL 1

listIter *listGetIterator(list *list, int direction);

listNode *listNext(listIter *iter);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值