摘自《redis设计与实现》

链表提供了高效的节点重排能力, 以及顺序性的节点访问方式, 并且可以通过增删节点来灵活地调整链表的长度。

链表在 Redis 中的应用非常广泛, 比如列表键的底层实现之一就是链表: 当一个列表键包含了数量比较多的元素, 又或者列表中包含的元素都是比较长的字符串时, Redis 就会使用链表作为列表键的底层实现。

除了链表键之外, 发布与订阅、慢查询、监视器等功能也用到了链表, Redis 服务器本身还使用链表来保存多个客户端的状态信息, 以及使用链表来构建客户端输出缓冲区(output buffer)。

链表和链表节点的实现

每个链表节点使用一个adlist.h/listNode结构来表示:

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

链表adlist.h/list:

typedef struct list {// 表头节点listNode *head;// 表尾节点listNode *tail;// 链表所包含的节点数量unsigned long len;// 节点值复制函数void *(*dup)(void *ptr);// 节点值释放函数void (*free)(void *ptr);// 节点值对比函数int (*match)(void *ptr, void *key);} list;

list 结构为链表提供了表头指针 head 、表尾指针 tail , 以及链表长度计数器 len , 而 dupfreematch 成员则是用于实现多态链表所需的类型特定函数:

  • dup 函数用于复制链表节点所保存的值;
  • free 函数用于释放链表节点所保存的值;
  • match 函数则用于对比链表节点所保存的值和另一个输入值是否相等。

Redis 的链表实现的特性:

  • 双端: 链表节点带有 prevnext 指针, 获取某个节点的前置节点和后置节点的复杂度都是 O(1) 。
  • 无环: 表头节点的 prev 指针和表尾节点的 next 指针都指向 NULL , 对链表的访问以 NULL 为终点。
  • 多态: 链表节点使用 void* 指针来保存节点值, 并且可以通过 list 结构的 dupfreematch 三个属性为节点值设置类型特定函数, 所以链表可以用于保存各种不同类型的值。

python 释放链表节点_redis:链表相关推荐

  1. 数据结构:(c实现)单向链表,单链表的头增,尾增,头删,尾删,任意位置的删除与插入。

    目录: 一:什么是单链表 (1)单链表节点数据结构 (2)单链表结构物理图解 二:单链表的几种接口函数的实现 (1)单链表的尾插函数(顺序插入) (2)单链表的尾删函数 (3)单链表的头增函数 (4) ...

  2. python定义链表节点_Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】...

    本文实例讲述了Python数据结构与算法之链表定义与用法.分享给大家供大家参考,具体如下: 本文将为大家讲解: (1)从链表节点的定义开始,以类的方式,面向对象的思想进行链表的设计 (2)链表类插入和 ...

  3. python 单链表节点怎么快速定义_线性表链式存储结构之单链表

    线性表的链式存储结构的特点就是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以在内存中未被占用的任意位置.比起顺序存储结构每个元素只需要存储一个位置就可以了.现在链式存储结构中,除了要存储数 ...

  4. free释放链表节点崩溃_【链表6】lt;最新gt;初识链表(link list)

    文/Edward 回顾之前讲述的链接两个结构体节点的内容,我们可以简单的将一些存储对象数据的结构体变量链接到一起,然后再去通过next指针遍历整个数据链,这就类似于将一些毫无关联的结构体变量链接成了一 ...

  5. python链表节点的插入p.next curnode_leetcode刷题总结之链表

    前言: 2020/1/14:今年过年前的任务就是回顾之前的刷过题,然后弄清以前没有弄懂的知识点,最后归纳整理形成自己的体系.因为"学而不思则罔,思而不学则殆",在比赛或者面试做题时 ...

  6. Python实现两两交换链表中的节点

    题目描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. Leetcode原题地址:https://leetcode-cn. ...

  7. Python中常用的数据结构---链表

    Python中常用的数据结构-链表 常用的数据结构有数组.链表(一对一).栈和队列.哈希表.树(一对多).图(多对多)等结构. 在本目录下我们将讲解,通过python语言实现常用的数据结构. 2.链表 ...

  8. python之链表、单链表、双向链表、单向循环链表

    python之链表.单链表.双向链表.单向循环链表 链表 顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时,又需要进行数据的搬迁,所以使用起来并非很灵活 链表结构可以充分利用计算机 ...

  9. python去实现链表_python实现链表

    链表: 链表不需要在内存存储一个连续的地方,通常就像一个链一样 它的每个节点包含本身和下一个元素的地址,以此来把两个元素进行关联,这就是一个链表 链表分单项和双向,一般单项就够用了. 链表存在的用意义 ...

最新文章

  1. JAVA事物API JTA
  2. jvm在创建对象时采用哪些并发安全机制
  3. 数据分析学习01-matplotlib绘图工具基本操作
  4. java integer null 0_Mybatis Integer类型参数值为0时得到为空的解决方法
  5. 如何在ASP.NET Core程序启动时运行异步任务(2)
  6. ASP.NET MVC URL重写与优化(初级篇)-使用Global路由表定制URL
  7. css 实现16:9比例自适应手机尺寸,可设置任意比例
  8. mockito 多层调用_连续调用的Mockito迭代器样式存根
  9. 360 绑架浏览器首页的解决方法
  10. 网络设备自动化运维工具——ansible入门笔记
  11. IOS-音乐播放器(附Demo)
  12. 什么是DNS云解析?云解析和普通解析有什么区别?
  13. Python爬虫爬取网页数据
  14. discuz 论坛配置 QQ/163 网易邮箱
  15. Python小结<1>
  16. 如何利用缓存服务器来负载均衡
  17. python 全栈开发,Day21(抽象类,接口类,多态,鸭子类型)
  18. VRF(虚拟路由转发)
  19. Unity SKFramework框架(二十一)、Texture Filter 贴图资源筛选工具
  20. C语言程序之经典习题:运输公司对用户计算运输费用。路程(s/km)越远,每吨/千米运费越低。

热门文章

  1. 【Kafka】kafka NotLeaderForPartitionException thisserver is not the leader for topic-partition
  2. Spark之hive的UDF自定义函数
  3. 95-080-046-源码-启动-flink-daemon.sh
  4. bottomnavigationview放大两边没有_有没有什么HAPPYEND的动漫?
  5. 让美团、京东、搜狐都说好的数据仓库,牛在哪?
  6. Servlet快速入门和工作原理
  7. 18个最常用的Win8快捷键
  8. Python之路【第十六篇续】Django进阶篇
  9. JDBCUtils——C3P0
  10. Firebug控制台详解(转)