当前位置: 首页 > news >正文

【Redis】双向链表结构

目录

  • 1、背景
  • 2、双向链表
    • 【1】底层结构
    • 【2】特性
    • 【3】优缺点

1、背景

redis的list类型在旧版本数据量小的时候用的压缩列表,数据量大的时候用双向链表,新版本使用快速列表,接下来就来讲一下redis(6.2.18版本)双向链表的底层结构。

2、双向链表

【1】底层结构

双向链表的每一个节点底层结构如下:

typedef struct listNode {struct listNode *prev; //指向上一个链表节点struct listNode *next; //指向下一个链表节点void *value; //节点的值
} listNode;

多个节点组成一个链表的底层结构如下:

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;

【2】特性

双向链表的特性如下:

特性实现方式
双向遍历每个listNode包含prev和next指针,支持前后向遍历
无环链表头节点的prev和尾结点的next均为NULL
长度缓存list.len直接记录节点数,无需遍历(O(1)时间复杂度)
多态支持通过dup、free、match函数指针,支持任意类型的值(如字符串、整数等)

【3】优缺点

双向链表的优缺点如下:

特性优点缺点
时间复杂度头部/尾部插入、删除:O(1)长度获取随机访问:O(n)需遍历节点
内存占用支持动态扩容,无需连续内存每个节点需存储prev和next指针
功能灵活性支持双向遍历,可存储任意类型数据无内置压缩机制,存储小数据时内存利用率低
实现复杂度结构简单,易于维护和扩展大量小节点内存碎片化风险
适用场景频繁头部/尾部操作(如LPUSH、RPOP)存储大量小数据时不如ziplist节省内存

相关文章:

  • STM32 DMA技术深度解析:从原理到实战应用讲解
  • TCP 粘包
  • TCP实现安全传输的核心机制 + TCP的报文讲解(全程图文讲解)
  • 工业4.0神经嫁接术:ethernet ip转profinet协议通信步骤图解
  • 2025年渗透测试面试题总结-阿里云[实习]阿里云安全-安全工程师(题目+回答)
  • 典型的**N+1查询问题**
  • 云原生数据库排障新挑战:AI驱动与分布式架构深度解析
  • 区块链blog1__合作与信任
  • U盘启动CentOS安装与网卡驱动修复指南
  • 实战分析Cpython逆向
  • GpuGeek:为创新者提供灵活、快速、高效的云计算服务!
  • window 显示驱动开发-报告图形内存(四)
  • 磁盘I/O瓶颈排查:面试通关“三部曲”心法
  • 计算机视觉----常见卷积汇总
  • git工具使用详细教程-------命令行和图形化工具
  • DB-GPT扩展自定义app配置说明
  • 空间组学高级分析方法介绍
  • 基于Deeplearning4j的多源数据融合预测模型实现:从设计到落地全解析
  • 线程通信的核心机制
  • 一套基于 Bootstrap 和 .NET Blazor 的开源企业级组件库
  • 与总书记交流的上海人工智能实验室年轻人,在探索什么前沿领域?
  • 山东市监局回应“盒马一批次‘无抗’鸡蛋抽检不合格后复检合格”:系生产商自行送检
  • 男子退机票被收90%的手续费,律师:虽然合规,但显失公平
  • 香港暂停进口美国北达科他州一地区禽肉及禽类产品
  • 中国科学院院士徐春明不再担任山东石油化工学院校长
  • 何立峰:中方坚定支持多边主义和自由贸易,支持世界贸易组织在全球经济治理中发挥更大作用