• 技术文章 >数据库 >Redis

    深入聊聊Redis中的双链表

    青灯夜游青灯夜游2021-12-01 09:53:25转载149
    本篇文章带大家了解一下Redis 数据结构中的双链表,简单介绍一下双链表的运用,希望对大家有所帮助!

    在 Redis 数据类型中的列表list,对数据的添加和删除常用的命令有 lpush,rpush,lpop,rpop,其中 l 表示在左侧,r 表示在右侧,可以在左右两侧做添加和删除操作,说明这是一个双向的数据结构,而 list 数据结构正是双向链表,类似 java 中的 LinekdList 链表列表。【相关推荐:Redis视频教程

    链表提供了高效的节点重排能力,以及顺序的节点访问方式,通过修改节点的 pre 和 next 指针来修改链表的数据。

    C 语言没有内置链表的数据结构,所以 Redis 构建了自己的链表结构。

    链表的数据结构,链表以及链表节点

    链表是由链表以及链表节点组成,每个链表节点使用一个 adlist.h/listNode 结构来表示:

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

    多个 listNode 可以通过 prev 和 next 指针组成双链表的,如题所示:

    1.png

    多个 listNode 可以组成链表,但是为了方便管理,使用 adlist.h/list 管理链表,list 结构如下:

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

    list 结构为链表提供了表头指针 head、表尾指针 tail,以及节点数量计算 len。下图展示一个由 list 结构和三个 listNode 节点组成的链表:

    2.png

    Redis 链表实现的特征有如下的总结:

    双链表的运用

    列表键,发布订阅、慢查询以及监视器等。

    总结

    更多编程相关知识,请访问:编程入门!!

    以上就是深入聊聊Redis中的双链表的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:掘金社区,如有侵犯,请联系admin@php.cn删除
    上一篇:Redis如何实现分布式锁?聊聊实现方法 下一篇:深入浅析Redis中的位图(bitmap)

    相关文章推荐

    • 深入了解Redis中的主从同步机制• 浅析Python中怎么用Redis• 深入聊聊Redis中的5种基本数据类型• 聊聊Redis中的缓存穿透、缓存雪崩、缓存击穿和缓存一致性• 聊聊Redis的持久化机制,到底采用RDB还是AOF呢?

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网