当前位置: 首页 > 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节省内存
http://www.dtcms.com/a/191694.html

相关文章:

  • 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 的开源企业级组件库
  • Java集合框架
  • 学习日志07 java
  • .NET 无侵入自动化探针原理与主流实现详解
  • redis中key的过期和淘汰
  • 【python实用小脚本-63】每天花费2小时修复黑白照片,Python一键转换,节省90%时间(建议收藏)
  • C++(12):using声明
  • TensorFlow深度学习实战(16)——注意力机制详解
  • 医疗数据迁移质量与效率的深度研究:三维六阶框架与实践创新
  • OpenCV光流估计:原理、实现与应用
  • 【视频】解决FFmpeg将RTSP转RTMP流时,出现的卡死、出错等问题