Redis链表

Redis链表
Redis使用的c语言并没有内置链表这种数据结构,所以Redis构建了自己的链表实现
列表键额底层实现之一是链表。当一个列表键包含了数量比较多的元素,又或者列表中包含的元素都是比较长的字符串时,Redis就会使用链表作为列表键的底层实现。
链表被广泛用于实现Redis的各种功能,比如列表键,发布与订阅,慢查询和监视器等。
链表和链表节点的实现:

typedef struct listNode{
	//前置节点
    struct listNode *prev;
    //后置节点
    struct listNode *next;
    //节点的值
    void *value;

}listNode;

可以通过prev和next组成双端链表
可以使用adlist.h/list持有链表,以方便操作

typedef struct list{
	//前置节点
    struct listNode *head;
    //后置节点
    struct listNode *tail;
    //链表所包含的节点数目
    unsigned long len;
    //节点值赋值函数
    void *(*dup)(void *ptr)
    //节点值释放函数
    void (*free)(void *ptr)
    //节点值对比函数
    int (*match)(void *ptr,void *key)

}list;

list提供了dup函数,free函数以及match函数
总结:
Redis的链表实现了如下的特性
双端:prev和next指针
无环:表头结点的prev和表位节点的next都指向null,对链表的访问以NULL为终点
带表头指针和表为指针:list结构提供了head头指针和tail尾指针
链表长度计数器
多态:使用void*指针保存节点值,链表可以用于保存各种不同类型的值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值