Redis学习笔记:链表

概述

链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活地调整链表的长度。链表在Redis中的应用非常广泛,比如列表键的底层实现之一就是链表。还有发布与订阅、慢查询、监视器等。

实现

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

cpp 复制代码
typedef struct listNode{
    //  前置节点
    struct listNode *prev;
    //  后置节点
    struct listNode *next;
    //  节点的值
    void *value;
} listNode;

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

cpp 复制代码
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,而dup、free和match成员则是用于实现多态链表所需的类型特定函数。如图是由一个list结构和三个listNode结构组成的链表:

Redis实现的是双端无环链表,链表节点带有prev和next指针,带链表长度计数器,Redis实现的链表是多态的,链表节点使用void*指针来保存节点值,并且可以通过list结构的dup、free、match三个属性为节点值设置类型特定函数,所以链表可以用于保存各种不同类型的值。

参考

《Redis设计与实现》

相关推荐
Love__Tay8 分钟前
【学习笔记】Python金融基础
开发语言·笔记·python·学习·金融
篱笆院的狗11 分钟前
如何使用 Redis 快速实现布隆过滤器?
数据库·redis·缓存
半导体守望者31 分钟前
ADVANTEST R3764 66 R3765 67爱德万测试networki connection programming网络程序设计手册
经验分享·笔记·功能测试·自动化·制造
我的golang之路果然有问题1 小时前
云服务器部署Gin+gorm 项目 demo
运维·服务器·后端·学习·golang·gin
小鸡脚来咯1 小时前
redis分片集群架构
数据库·redis·架构
什么都想学的阿超1 小时前
【Redis系列 03】掌握Redis编程艺术:事务、管道与Lua脚本完全指南
redis·junit·lua
柠石榴1 小时前
【论文阅读笔记】《A survey on deep learning approaches for text-to-SQL》
论文阅读·笔记·深度学习·nlp·text-to-sql
田梓燊2 小时前
数学复习笔记 27
笔记
Lester_11012 小时前
嵌入式学习笔记 - freeRTOS xTaskResumeAll( )函数解析
笔记·stm32·单片机·学习·freertos
jackson凌2 小时前
【Java学习笔记】Math方法
java·笔记·学习