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

news2024/10/5 15:30:56

文章目录

  • ☃️概述
  • ☃️数据结构
  • ☃️源码
  • ☃️其他


在这里插入图片描述

欢迎来到 请回答1024 的博客

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

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

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

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

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

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


☃️概述

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

在这里插入图片描述


☃️数据结构

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

  • LinkedList :普通链表,可以从双端访问,内存占用较高,内存碎片较多
  • ZipList :压缩列表,可以从双端访问,内存占用低,存储上限低
  • QuickListLinkedList + 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)。
节点结构:
每个节点由一个包含值的对象和两个指针组成。节点结构如下:

typedef struct listNode {
    struct listNode *prev;
    struct listNode *next;
    void *value;
} listNode;

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

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

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




在这里插入图片描述



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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GAN的loss为nan的解决办法(成功)

跑了好几个GAN模型,一运行loss就巨大,几次epoch后就变NaN,或者直接就爆掉 有人说loss为nan是因为里面有log出问题了,但我想着文章里给的代码肯定得是能跑的啊 后来换了个电脑,重新把cyclegan的源码跑了一下&#xff…

[SWPUCTF 2022 新生赛]ez_ez_unserialize

要绕过wakeup函数&#xff0c;只要序列化的中的成员数大于实际成员数&#xff0c;即可绕过。 <?php class X {public $x fllllllag.php; }$anew X(); echo serialize($a); O:1:“X”:1:{s:1:“x”;s:13:“fllllllag.php”;} 修改为 O:1:“X”:3:{s:1:“x”;s:13:“flllll…

面向多源异质遥感影像地物分类的自监督预训练方法

源自&#xff1a;测绘学报 作者&#xff1a;薛志祥, 余旭初, 刘景正, 杨国鹏, 刘冰, 余岸竹, 周嘉男, 金上鸿 摘 要 近年来,深度学习改变了遥感图像处理的方法。由于标注高质量样本费时费力,标签样本数量不足的现实问题会严重影响深层神经网络模型的性能。为解决这一突出矛盾…

matlab绘图之在曲线上加竖直线

matlab绘图之在曲线上加竖直线 clear clc close all x0:1:20; yxlsread(compare.xlsx,A1:A18); plot(y,b) grid on; hhaxis; hold on; plot([10,10],[hh(3),hh(4)],r--) plot([8,8],[hh(3),hh(4)],k--) plot([2,2],[hh(3),hh(4)],k--) xlabel(它是x轴) ylabel(它是y轴) text(4,…

其他代码题

1.阶乘累加 2.回文数 3.字典查询 4.“结构体”的应用 5.链表

ROM修改进阶教程------小米HyperOS系统 简单修改设置logo界面大小 等详细操作步骤解析

小米 HyperOS系统是目前小米推出的一款全新的操作系统.官方宣称采用了微内核设计和动态内存技术,具有高效能和稳定性。Hyperos的设计风格简约、现代化,注重用户体验的流畅性和直观性。Hyperos以其简约的设计风格和出色的性能表现赢得了用户的青睐。但他目前的设置版本里面其l…

YOLOv8常见水果识别检测系统(yolov8模型,从图像、视频和摄像头三种路径识别检测)

1.效果视频&#xff08;常见水果识别&#xff08;yolov8模型&#xff0c;从图像、视频和摄像头三种路径识别检测&#xff09;_哔哩哔哩_bilibili&#xff09; 资源包含可视化的水果识别检测系统&#xff0c;可识别图片和视频当中出现的六类常见的水果&#xff0c;包括&#xf…

用Python写一个去文档水印的算法

处理效果对比&#xff1a; #图片处理 def imgDeal(img_path,save_path):img Image.open(img_path)img levelsDeal(img,108,164)img_res Image.fromarray(img.astype(uint8))print(u图片[ img_path u]处理完毕)img_res.save(save_path)#图像矩阵处理 def levelsDeal(img,…

平台流量思维与私域电商思维的区别及特点

随着互联网的发展&#xff0c;电商平台已经成为了人们购物的主要渠道之一。然而&#xff0c;随着竞争的加剧&#xff0c;电商平台的流量获取成本也在不断提高。在这种情况下&#xff0c;私域电商思维应运而生&#xff0c;成为了一种新的商业模式。那么&#xff0c;对比另一种主…

深入了解O2OA的开发平台如何支撑涉密应用系统技术要求

涉密应用系统O2OA的开发平台是一个功能强大且高度安全的开发环境&#xff0c;旨在为涉密信息的处理、存储和传输提供坚实的技术支撑。该平台具备以下显著特点&#xff1a; 首先&#xff0c;安全性是涉密应用系统O2OA开发平台的核心优势。平台严格遵守国家关于涉密信息系统的安…

《从“为什么”开始》乔布斯让Apple红遍世界的黄金圈法则 - 三余书屋 3ysw.net

从“为什么”开始&#xff1a;乔布斯让Apple红遍世界的黄金圈法则 大家好&#xff0c;今天我们要解读的书名叫《从“为什么”开始&#xff1a;乔布斯让Apple红遍世界的黄金圈法则》。这本书向我们揭示了为什么有些领导者如此成功&#xff0c;以及是什么让他们拥有别人没有的影…

『 论文解读 』大语言模型(LLM)代理能够自主地利用1 day漏洞,利用成功率竟高达87%,单次利用成本仅8.8美元

1. 概览 该论文主要展示了大语言模型LLM代理能够自主利用现实世界的 1 day 漏洞。研究我发现&#xff0c; GPT-4 在提供了CVE描述的情况下&#xff0c;能够成功利用 87% 的漏洞。 这与其他测试模型&#xff08;如 GPT-3.5 和其他开源 LLM &#xff09;以及开源漏洞扫描器&…

本地部署Llama3教程,断网也能用啦!

4月18日&#xff0c;Meta在官方博客官宣了Llama3&#xff0c;标志着人工智能领域迈向了一个重要的飞跃。经过笔者的个人体验&#xff0c;Llama3 8B效果已经超越GPT-3.5&#xff0c;最为重要的是&#xff0c;Llama3是开源的&#xff0c;我们可以自己部署&#xff01; 本文和大家…

GreatSQL统计信息相关知识点

相关知识点&#xff1a; INNODB_STATS_PERSISTON或用STATS_PERSIST1定义单个表时&#xff0c;优化器统计信息将持久化到磁盘。默认情况下&#xff0c;innodb_stats_persistent是启用的。 持久统计信息存储在mysql.innodb_table_stats和mysql.innodb_index_stats表中。 默认情…

NVIDIA安装程序失败-Nsight Visual Studio Edition失败解决办法

博主是要升级cuda版本&#xff0c;那么在安装新版本之前需要卸载以前的版本。 博主一溜卸载下去&#xff0c;最后有这么个东西卸载不掉&#xff0c;Nsight Visual Studio Edition 不管是电脑系统卸载还是360卸载&#xff0c;都卸载不掉。 此时安装新的cuda也遇到了这个问题 由…

【Linux】深入理解Linux文件系统与日志分析

目录 一、inode与block 1.block与inode概述 2.inode的内容 3.inode号码 4.inode的大小 5.访问文件的简单流程 6.inode的特殊作用 7.通过indoe号删除rm常规方法删除不掉的文件 二、硬链接和软链接 三、恢复误删除的文件 1.恢复EXT类型的文件 示例 2.xfs类型文件备份…

MySQL学习-非事务相关的六大日志、InnoDB的三大特性以及主从复制架构

一. 六大日志 慢查询日志:记录所有执行时间超过long_query_time的查询&#xff0c;方便定位并优化。 # 查询当前慢查询日志状态 SHOW VARIABLES LIKE slow_query_log; #启用慢查询日志 SET GLOBAL slow_query_log ON; #设置慢查询文件位置 SET GLOBAL slow_query_log_file …

计算机系列之体系结构、存储系统

7、体系结构分类 1、按处理机的数量进行分类&#xff1a; 单处理系统&#xff08;一个处理单元和其他设备集成&#xff09;、 并行处理系统&#xff08;两个以上的处理机互联&#xff09;、 分布式处理系统&#xff08;物理上远距离且耦合的多计算机系统&#xff09; 2、F…

关于加强电力系统通信与电网调度自动化建设问题的规定

关于加强电力系统通信与电网调度自动化建设问题的规定 为了保障电力系统安全、经济、优质、可靠运行&#xff0c;必须加强电网调度管理和提高技术装备水平。根据当前电网技术装备状况&#xff0c;结合电力系统通信和电网调度自动化的特点&#xff0c;以及今后规划发展的要求&am…

解密数字化工业革命:数字孪生工厂和信息集成

数字孪生工厂与信息集成&#xff01; 虚拟工厂是将实体工厂映射过来&#xff0c;具备仿真、管理和控制实体工厂关键要素功能的模型化平台。数字孪生技术将虚拟工厂的概念不断深入&#xff0c;利用物联网技术和监控技术加强信息管理服务&#xff0c;通过合理计划排程&#xff0c…