Redis-数据结构与对象-链表

1. 作用

Redis中链表被广泛运用在很多地方,例如

列表键,发布订阅,慢查询,监视器,Redis服务器本身还是要链表保存多个客户端状态信息,以及运用链表构建客户端输出缓冲区

2. 数据结构

typedef struct listNode{

    //前置节点

    struct listNode *prev;

    //后置节点

    struct listNode *next;

    //节点的值

    void *value;

}





typedef struct list{

    //表头节点

    listNode *head;

    //表尾节点

    listNode *tail;

    //链表所包含的节点数量

    unsigned long len;

    //节点值复制函数

    void *(*dup)(void *ptr);

    //节点值释放函数

    void *(*free)(void *ptr);

    //节点值对比函数

    void *(*match)(void *ptr,void *key)

}

 

3. Redis链表特点

3.1. 双端

链表节点带有prev和next指针,获取某个节点的前置节点和后置节点的复杂度都是O(1)

3.2. 无环

表头节点的prev指针和表尾节点的next指针都指向NULL,对链表的访问以NULL为终点

3.3. 带表头指针和表尾指针

通过list结构的head指针和tail指针,获取链表头尾的负责度是O(1)

 

3.4. 带链表长度计数器

程序使用list结构的len属性来对list持有的节点数量计数,获取长度时间复杂度为O(1)

3.5. 多态

链表节点使用void* 指针来保存节点值,并且可以通过list结构的dup,free,match三个属性为解ID那设置特定类型的函数,所以链表可以存放不同类型值

 

全部评论

相关推荐

点赞 评论 收藏
分享
02-25 19:38
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 一张图晒出你司的标语 #
4440次浏览 78人参与
# 找AI工作可以去哪些公司? #
9797次浏览 290人参与
# 米连集团26产品管培生项目 #
13464次浏览 285人参与
# 你的实习产出是真实的还是包装的? #
20642次浏览 345人参与
# 从事AI岗需要掌握哪些技术栈? #
9605次浏览 364人参与
# 春招至今,你的战绩如何? #
67341次浏览 595人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
15619次浏览 226人参与
# AI面会问哪些问题? #
28823次浏览 609人参与
# 中国电信笔试 #
32210次浏览 295人参与
# 你做过最难的笔试是哪家公司 #
35309次浏览 290人参与
# 金三银四,你的春招进行到哪个阶段了? #
22501次浏览 284人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
341137次浏览 2175人参与
# 如何准备秋招 #
78321次浏览 868人参与
# 同bg的你秋招战况如何? #
212264次浏览 1121人参与
# 哪些公司真双非友好? #
69785次浏览 289人参与
# 应届生被毁约被毁意向了怎么办 #
63343次浏览 305人参与
# 阿里笔试 #
179302次浏览 1321人参与
# 机械人避雷的岗位/公司 #
62720次浏览 393人参与
# 小马智行求职进展汇总 #
25149次浏览 80人参与
# 第一份工作一定要去大厂吗 #
15089次浏览 123人参与
# 担心入职之后被发现很菜怎么办 #
291419次浏览 1210人参与
# 为了减少AI幻觉,你注入过哪些设定? #
26314次浏览 310人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务