2.链表
C语言没有实现链表,因此Redis自己实现了一套
列表(list)键的底层实现之一就是链表,当一个列表键包含了较多元素,或元素都是比较长的字符串,则会使用链表作为列表键的底层实现,如integers列表键,链表中的每个节点都保存了一个整数值
发布与订阅、慢查询、监视器等也用到了链表
2.1 实现
链表节点(adlist.h/listNode)表示如图:
由list(adlist.h/list)来组成链表,表示如图:
可以看到,list还包含了几个用于实现多态链表所需的类型特定函数,因为listNode中的value类型为void指针,且使用dup、free、match三个方法(参数都是void)为节点值设置类型特定函数,,因此可以保存不同类型的值,
方法具体作用如下图:
链表示例如图: