链表
废话不多说,今天继续学习Redis的基本数据结构——链表和哈希表。
先看一个例子,以下展示的integers列表键包含了从1到1024共一千零二十四个整数:
redis-> LLEN integers
(integer) 1024
redis-> LRANGE integers 0 5
1)"1"
2)"2"
3)"3"
4)"4"
5)"5"
integers 列表键的底层实现就是一个链表,链表中的每个节点都保存了一个整数值。链表在Redis使用十分广泛,发布和订阅、慢查询、监视器等功能都用到了链表,Redis服务器本身用链表保存了多个客户端的状态信息,以及使用链表来构建客户端输出缓冲区(output buffer)。
Redis的链表和数据结构中的双向链表的设计是一致的。每个链表节点的声明在adlist.h/listNode结构中:
typedef struct listNode{
struct listNode * prev;
struct listNode * next;
void * value;
} listNode;
节点包含了前驱、后继和值。
typedef struct list