博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis数据结构之一:链表
阅读量:6970 次
发布时间:2019-06-27

本文共 660 字,大约阅读时间需要 2 分钟。

hot3.png

        链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活地调整链表的长度。redis提供五种数据结构:String、hash、list、set、sorted set。这五大数据类型底层有不同的实现方式,给我们在数据结构类型的选择上更方便。底层数据结构的实现主要分为以下几块:链表、字典、跳跃表、整数集合、压缩列表、对象。首先来分析一下链表。

         (1)listNode节点

          在adlist.h结构来表示链表节点,如下图所示,

          150656_H2SY_2853171.png

            listNode通过prev和next指针组成双端链表:,如下图所示:

150922_csar_2853171.png    

       (2)list节点

        虽然仅仅使用多个listNode结构就可以组成链表,但使用adlist.h/list来持有链表的话,操作起来更方便,如下图所示:

           151056_UsDh_2853171.png

          list结构为链表提供了表头指针、表尾指针、链表长度计数器、而dup用于复制链表节点所保存的数、 free用于释放链表节点所保存的值、match用于比较链表节点所保存的值和另一个输入值是否相等。

        list节点和listNode节点的关系可以用下图来表示;

       152045_P2ZN_2853171.png 

        (3)总结

             redis链表实现的特性总结如下:

              (i)双端:获取某个节点的前置节点和后置节点的复杂度都是O(1)。

              (ii)无环。  

               (iii)带表头指针和表尾指针

               (iv)带链表长度计数器

                (v)多态。

         (4)用途

                   链表广泛应用于实现redis的各种功能,比如列表键、发布和订阅、慢查询、监视器等。

      

              

转载于:https://my.oschina.net/oneFaith/blog/774835

你可能感兴趣的文章
Jpchina博客
查看>>
使用手机作单反相机的遥控器
查看>>
finally的用法,拦截器是Struts2的核心,异常处理
查看>>
解决linux系统CentOS下调整home和根分区大小
查看>>
PHP基础教程 常见PHP错误类型及屏蔽方法
查看>>
负载均衡,NAT,ACL,VTP,DHCP,热备份,路由OSPF
查看>>
在Windows下如何创建虚拟环境(默认情况下)
查看>>
cwiki-us-angular-app 导入后如何添加到自己的项目
查看>>
DataPipeline |Apache Kafka实战作者胡夕:Apache Kafka监控与调优
查看>>
多线程设计模式:第五篇 - Future模式和两阶段终止模式
查看>>
linux下如何关闭已登录用户
查看>>
我的友情链接
查看>>
unix基础教程9 标准I/O
查看>>
zabbix中通过shell脚本进行微信监控告警
查看>>
sed运用实例一——基于变量的动态替换
查看>>
Html 常见问题
查看>>
GitHub十周岁HanLP自然语言处理包用户量超越CoreNLP
查看>>
Pycharm上Django的使用 Day2
查看>>
5.22-zabbix监控Nginx
查看>>
OSChina 周三乱弹 ——纪念Bob Taylor
查看>>