Redis数据结构——链表list

链表是一种常用的数据结构,提供了顺序访问的方式,而且高效地增删操作。
Redis中广泛使用了链表,例如:列表的底层实现之一就是链表。

在Redis中,链表分为两部分:链表信息 + 链表节点。

  • 链表节点用来表示链表中的一个节点,基础的值和指向前和后的指针
  • 链表信息,用来保存整个链表的信息,例如首尾节点、节点数量

先来说链表节点,就是我们最常见的链表节点的结构:

typeof struct listNode{// 前驱节点struct listNode *prev;// 后继节点struct listNode *next;// 节点的值void *value; 
}listNode; 

通过链表节点中的prev和next组成双向链表。

而链表这个结构体中保存了整个链表的信息

typeof struct list{listNode *head; // 表头节点listNode *tail; // 表尾节点unsigned long len; // 链表节点数量// 接下来就是一些链表操作的API // 节点复制 ...// 节点释放 ...// 节点比较 ... 
}list; 

Redis中的链表并没有什么特殊之处,总结一下特点:

  • 双端操作,链表信息list中保存了首尾节点
  • 无环,head的prev始终为null,tail的next始终为null
  • O(1)获取链表节点数量
  • 多态:链表节点中通过void*来保存节点值,节点值可以是任意类型。

参考文章

  • Redis数据结构——链表 - 随心所于 - 博客园
  • 《Redis设计与实现》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/68453.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git 配置网络代理

提高 git 访问 github 速度 网络代理前提: 请开启代理(梯子)检查代理端口(可能会有所不同) 文章目录 1. git 配置参数列表命令:2. git 添加 http 代理3. git 取消 http 代理 1. git 配置参数列表命令: gi…

轻量级 Spring Task 任务调度可视化管理

Spring Task/Spring Scheduler 傻傻分不清 首先做一下“名词解释”,分清楚这两者的区别: Spring Task Spring Task 是 Spring 框架自带的一个任务调度模块,提供了基本的任务调度功能。它是通过 Java 的 Timer 和 TimerTask 类来实现的&…

2023年游戏买量能怎么玩?

疫情过后,一地鸡毛。游戏行业的日子也不好过。来看看移动游戏收入:2022年,移动游戏收入达到920亿美元,同比下降6.4%。这告诉我们,2022年对移动游戏市场来说是一个小挫折。 但不管是下挫还是上升,移动游戏市…

Martin_DHCP_V3.0 (DHCP自动化泛洪攻击GUI)

Github>https://github.com/MartinxMax/Martin_DHCP_V3.0 首页 Martin_DHCP_V3.0 自动化DHCP洪泛攻击 Martin_DHCP_V3.0 使用方法 安装三方库 #python3 1.RunMe_Install_Packet.py 攻击路由器 #python3 Martin_DHCP_Attack.py 填写网卡 填写攻击次数 开始运行

ASPICE学习笔记

文章目录 1. ASPICE是什么?2. ASPICE能干什么?2.1 过程参考模型2.2 过程评估模型参考1. ASPICE是什么? ASPICE的全称是Automotive SPICE。很明显的看出ASPICE是由SPICE发展而来。而SPICE是由国际标准化组织ISO、国际电工委员会IEC、信息技术委员会JTC1发起制定的ISO15504标…

轻装上阵,不调用jar包,用C#写SM4加密算法【卸载IKVM 】

前言 记得之前写了一个文章,是关于java和c#加密不一致导致需要使用ikvm的方式来进行数据加密,主要是ikvm把打包后的jar包打成dll包,然后Nuget引入ikvm,从而实现算法的统一,这几天闲来无事,网上找了一下加密库【BouncyCastle.dll】进行加密,目的是想统一加密。因为ikvm相…

HTML详解连载(5)

HTML详解连载(5) 专栏链接 [link](http://t.csdn.cn/xF0H3)下面进行专栏介绍 开始喽行高:设置多行文本的间距属性名属性值行高的测量方法 行高-垂直居中技巧 字体族属性名属性值示例扩展 font 复合属性使用场景复合属性示例注意 文本缩进属性…

广告聚合平台能为APP开发者提供哪些帮助

应用变现平台是帮助开发者优化广告策略并最终获得更多收入的综合途径。在广告变现过程中,接入单一的广告联盟,变现效率不高,并且开发者需要花费许多精力进行筛选和管理,难免会应接不暇,而聚合广告平台的出现则一定程度…

一百五十二、Kettle——Kettle9.3.0本地连接Hive3.1.2(踩坑,亲测有效,附截图)

一、目的 由于先前使用的kettle8.2版本在Linux上安装后&#xff0c;创建共享资源库点击connect时页面为空&#xff0c;后来采用如下方法&#xff0c;在/opt/install/data-integration/ui/menubar.xul文件里添加如下代码 <menuitem id"file-openZiyuanku" label&…

NFT Insider#102:The Sandbox重新上线LAND桥接服务,YGG加入Base生态

引言&#xff1a;NFT Insider由NFT收藏组织WHALE Members(https://twitter.com/WHALEMembers)、BeepCrypto&#xff08;https://twitter.com/beep_crypto&#xff09;联合出品&#xff0c;浓缩每周NFT新闻&#xff0c;为大家带来关于NFT最全面、最新鲜、最有价值的讯息。每期周…

Rust语法:所有权引用生命周期

文章目录 所有权垃圾回收管理内存手动管理内存Rust的所有权所有权转移函数所有权传递 引用与借用可变与不可变引用 生命周期悬垂引用函数生命周期声明结构体的生命周期声明Rust生命周期的自行推断生命周期约束静态生命周期 所有权 垃圾回收管理内存 Python&#xff0c;Java这…

leetcode 面试题 02.05 链表求和

⭐️ 题目描述 &#x1f31f; leetcode链接&#xff1a;面试题 02.05 链表求和 ps&#xff1a; 首先定义一个头尾指针 head 、tail&#xff0c;这里的 tail 是方便我们尾插&#xff0c;每次不需要遍历找尾&#xff0c;由于这些数是反向存在的&#xff0c;所以我们直接加起来若…