Redis入门到通关之Redis数据结构-List篇

文章目录

|------------------|
| 欢迎来到 请回答1024 的博客 |

🍓🍓🍓欢迎来到 请回答1024的博客

关于博主: 我是 请回答1024,一个追求数学与计算的边界、时间与空间的平衡,0与1的延伸的后端开发者。

博客特色: 在我的博客中,开设了如下专栏(点击可以进入专栏奥~): JavaMySQLRedisSpringSpringBootSpringCloudRabbitMQ微服务分布式 等相关技术专栏。期待与您一起,探索编程世界中的发现和创新之旅。

🍎🍎🍎我的主页 : https://reply1024.blog.csdn.net

敬请期待定期更新、见解和教程!让我们一起踏上这段编码冒险之旅!

|--------------------------|
| 数学与计算的边界 时间与空间的平衡 0与1的延伸 |

☃️概述

RedisList类型可以从首、尾操作列表中的元素:

☃️数据结构

哪一个数据结构能满足上述特征?

  • LinkedList :普通链表,可以从双端访问,内存占用较高,内存碎片较多
  • ZipList :压缩列表,可以从双端访问,内存占用低,存储上限低
  • QuickList:LinkedList + ZipList,可以从双端访问,内存占用较低,包含多个ZipList,存储上限高

RedisList结构类似一个双端链表,可以从首、尾操作列表中的元素:

在3.2版本之前,Redis采用ZipList和LinkedList来实现List,当元素数量小于512并且元素大小小于64字节时采用ZipList编码,超过则采用LinkedList编码。

在3.2版本之后,Redis统一采用QuickList来实现List:

☃️源码

☃️其他

底下的就别看了 就图一乐

在 Redis 中,List 类型的底层数据结构是双向链表(doubly linked list)。下面是关于 Redis List 类型底层数据结构的一些详细信息:

双向链表结构:

Redis 中的 List 类型使用双向链表来实现。每个节点包含了一个指向前一个节点和一个指向后一个节点的指针,这使得在链表中任意位置插入或删除节点的操作都很高效。

特点:

双向链表支持在列表头部和尾部进行快速的插入和删除操作,时间复杂度为 O(1)。

对于索引定位的操作,双向链表的性能相对较差,因为需要从头或尾依次遍历节点来找到指定位置的元素,时间复杂度为 O(n)。

节点结构:

每个节点由一个包含值的对象和两个指针组成。节点结构如下:

c 复制代码
typedef struct listNode {
    struct listNode *prev;
    struct listNode *next;
    void *value;
} listNode;

头尾指针:

Redis 的 List 对象中包含指向链表头部和尾部的指针,即 head 和 tail 指针。这使得在列表的两端进行插入和删除操作都非常高效。

压缩列表:

在某些情况下,Redis 也可以使用压缩列表(ziplist)作为 List 的底层数据结构,主要是当列表元素数量比较少或元素都是较小的整数或短字符串时。但是,压缩列表不支持随机访问,而是通过遍历来获取元素,因此对于需要频繁随机访问的 List,Redis 会使用双向链表作为底层数据结构。

Redis 的 List 类型在大多数情况下使用双向链表作为底层数据结构,这种设计使得 List 支持高效的头尾操作,但在随机访问或根据索引查找元素时效率较低。

相关推荐
AOwhisky19 分钟前
Redis 学习笔记(第一期):概述、安装配置与核心理论
运维·数据库·redis·笔记·学习·云计算
AOwhisky1 小时前
Redis 学习笔记(第四期):高可用与集群(哨兵 + Cluster + 容器化)
linux·运维·数据库·redis·笔记·学习·缓存
dtq04241 小时前
C语言刷题数组5,6(求平均值,求最大值)
c语言·数据结构·算法
洛水水2 小时前
【力扣100题】81.寻找两个正序数组的中位数
数据结构·算法·leetcode
Coder-magician3 小时前
《代码随想录》刷题打卡day15:二叉树part05
数据结构·c++·算法
Darling噜啦啦3 小时前
二叉树与递归算法实战:从树结构到 LeetCode 爬楼梯,一文吃透前端数据结构与递归思维
前端·javascript·数据结构
Irissgwe3 小时前
算法的时间复杂度和空间复杂度
数据结构·c++·算法·c·时间复杂度·空间复杂度
IT策士3 小时前
Redis 从入门到精通:事务与 Lua 脚本
redis·junit·lua
qq_297574674 小时前
设计模式系列文章(基础篇第22篇):访问者模式——分离数据结构与操作,实现灵活扩展
数据结构·设计模式·访问者模式
云淡风轻~窗明几净4 小时前
角谷猜想的任意算法测试
数据结构·人工智能·算法