【地铁上的Redis与C#】数据类型(七)--List类型

news2024/7/6 18:58:18

我们这篇文章开始讲解list类型。

什么是list

list是一个存储空间保存多个数据,底层使用双向链表存储结构实现的一种Redis数据类型,。list类型一般用在存储多个数据,并需要对数据进入存储空间的顺序进行区分的情况下。list的存储方式是一个存储空间保存多个数据,且可以通过数据可体现出数据进入的顺序。
前面提到了双向链表,那么我们就在这里简单的学一下与双向两边类似的另外两种数据结构顺序表链表

  1. 顺序表
    顺序表的结构如下图所示
    在这里插入图片描述
    从上图我们可以看出来,顺序表中数据与数据之间是紧密连接的,因此它能很快的检索数据,但是如果要在某个位置插入一个 新的数据就会很耗时,这是因为要插入新数据的位置的数据及其后面所有数据都要后移一位。
  2. 链表
    链表的结构如下图所示
    在这里插入图片描述
    上图中的黄色部分是存储的数据,绿色部分是指向下一个数据存储位置的指针。这种结构解决了前面我们提到的顺序表所遇到的问题,每次插入新数据时只需要将上一个数据的指针指向新插入数据的位置,并将下一个数据的位置写入到当前写入数据的指针中。但是这种存储结构也存在问题,因为数据与数据之间的间距不同,因此查询数据会慢一些,并且每个数据都要额外的存储指向下一个数据位置的指针,这就增加了内存的开销。同时再插入数据时,因为要更改插入位置的前一个数据指针指向的位置,因此要遍历内存找到前一个数据并修改指针指向的地址,因此对内存的开销也很大。
  3. 双向链表:
    双向链表的结果如下图所示
    在这里插入图片描述
    双向链表比链表多存储了前一个数据位置的指针(图中紫色部分),它解决了链表插入耗内存的问题。

list基本操作

了解完list的相关知识,我们来看一下list的基本操作指令。

  1. 添加/修改数据
    当我们需要对数据进行 添加修改时,可以使用lpushrpush指令,这两个指令都可以对数据进行添加数据,唯一的区别是,lpush表示从list的左侧添加数据而rpush表示从list的右侧添加数据。以lpush为例,语法是这样的(rpush语法相同)lpush key value1 value2 … valuen,例如我们向name中插入“anna”、“jack”,我们可以这么编写指令lpush name anna jack
  2. 获取数据
    获取数据时可以使用lpush指令,语法是这样的lpush key start stop,其中start表述获取数据的起始位置,stop表获取数据的结束位置,例如我们要获取car的第1个到第4个的数据,我们可以这么编写指令lpush car 0 3。如果要获取从起始位置到结尾的全部数据,那么我们可以将stop设置为-1。当然如果只需要获取某个数据我们可以使用lindex,语法是这样的lindex key index,index表示要获取的元素的位置,例如要获取car中的第五个数据,指令这么编写lindex car 4。在开发中有时我们需要获取list中存储的数据的总数,这是我们可以llen指令,语法是llen key
  3. 获取并移除数据
    当我们需要获取数据并删除数据时可以使用lpoprpop指令,这两个指令的区别是一个是从左侧获取并删除,另一个是从右侧获取并删除。以lopo为例,当我们需要获取car中的第一个数据时,我们可以这么编写指令lpop car

总结

这篇文章我们讲解了list类型和list的基本操作。

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

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

相关文章

气泡法检漏技术特点分析和新型压力衰减法测试技术

摘要:针对传统的气泡法检漏技术,本文详细介绍了气泡法的基本原理、气泡法中的两种标准方法——加压法和真空法以及对应的标准规范,并对这两种气泡法进行了对比分析。本文还对气泡法的技术特点进行了分析,指出了气泡法检漏技术的局…

使用ruoyi-vue控制数据权限

说在前面 啥是数据权限?例如校长可以看到全部学生的信息,系主任可以看到该院系的学生信息,老师可以看到本班的学生信息,学生自己只能查看自己的信息 对于ruoyi的角色,我们只能控制用户可以访问那些菜单以及接口,而不能控制接口返回的数据 假如有这样一个需求,不同用户上传各…

赛狐ERP | 亚马逊卖家FBA常见问题解析!

许多亚马逊卖家在使用亚马逊FBA时经常会遇到一些问题,如FBA如何收费、如何提升发货数量、物流方式问题等问题,这些问题是常见问题,也是亚马逊卖方们应该把握的问题。下面就来跟大家分享一些常见的亚马逊FBA相关问题。一、亚马逊FBA如何收费&a…

OSCP_vulnhub—GOLDENEYE: 1

vulnhub—GOLDENEYE: 1About信息搜集查看js泄露POP3 密码破解及登录使用admin/xWinter1995x!登录 getshell提权About GoldenEye: 1 ~ VulnHub Download (Mirror): https://download.vulnhub.com/goldeneye/GoldenEye-v1.ova DHCP service: Enabled IP address: Automaticall…

【Kubernetes 入门实战课】Day01——虚拟机创建及安装

文章目录前言一、实验环境选择二、选择合适的虚拟机软件1.VirtualBox2.VMWare三、Linux版本四、如何配置虚拟机1、安装VMware2、虚拟网络设置1、虚拟机网络编辑器2、设置 VMnet 8 网段3、创建虚拟机1、创建虚拟机2、启动虚拟机3、虚拟机配置4、虚拟机管理前言 俗话说&#xff…

[oeasy]python0052_ raw格式字符串_单引号_双引号_反引号_ 退格键

转义字符 回忆上次内容 最近玩的是\n、\r 之外的转义序列 \a是 ␇ (bell)\t是 水平制表符\v是 换行不回车 通过 16 进制数值转义 \xhh把(hh)16 进制对应的 ascii 字符输出 通过 8 进制数值转义 \ooo把(nnn)8 进制对应的 ascii 字符输出 这次加了 转义输出 反斜杠本身 \\ 输出…

24.Isaac教程--路径规划的区域划分

路径规划的区域划分 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 为了赋予地图区域关于通过它们规划的路径的语义意义,引入了三个新的规划器影响区域: No-replanning zones:当机器人通过这个多边形区域时&a…

python textwrap 模块,这里有你需要的学习资料

Python 标准库中的 textwrap 模块可以把长文本按照指定的宽度进行换行。这个模块提供了一些高级的文本处理功能,例如按照指定的宽度进行自动换行,保留段首缩进等。 python textwrap 模块python textwrap 模块主要函数textwrap.wrap(text, width70, \*\*k…

ruoyi-vue版本(四)@PreAuthorize 注解在若依里面的作用,springsecurity 框架相关的配置

目录1 需求2 实现2.1 背景2.2 实现2.3 springsecurity 框架相关的配置2.3.1 EnableGlobalMethodSecurity详解2.3.2 认证失败处理类AuthenticationEntryPointImpl2.3.3 自定义退出处理类LogoutSuccessHandlerImpl2.3.4 filter 为啥会多次执行3 PreAuthorize 注解1 需求 我们打开…

Flink面试题汇总

1,简单介绍一下 Flink Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。并且 Flink 提供了数据分布、容错机制以及资源管理等核心功能。Flink提供了诸多高抽象层的API以便用户编写分布式任务: DataSet API&#xf…

nacos多网卡服务器引发的问题

1、背景 某一日晚上,公司的一个微服务上线重启后,双节点,只有一个节点注册到了nacos服务器,另外一个节点一直在nacos界面上无法看到,两个节点的服务启动也没有报错,api网关转发给服务时,时不时有…

深度学习入门基础——卷积计算

卷积计算 卷积是数学分析中的一种积分变换的方法,在图像处理中采用的是卷积的离散形式。这里需要说明的是,在卷积神经网络中,卷积层的实现方式实际上是数学中定义的互相关 (cross-correlation)运算,与数学…

【进阶】数据在内存中的存储

目录 一、数据类型介绍 1、基本的内置类型 2、类型的基本归类 二、整型在内存中的存储 1、原码、反码、补码 2、大小端介绍 3、大端小端的经典例题 三、浮点数在内存中的存储 1、浮点数存储规则 2、浮点数存储例题 一、数据类型介绍 1、基本的内置类型 char /…

非标设备制造业项目管理软件如何帮助企业做好项目报价管理?

非标设备制造企业,由于需求的不确定性、方案的多样性、交期的紧迫性、以及批量小(很多需要先做单台样机)等特性,导致非标设备要在有限时间内做到准确报价存在一定的困难,这也是众多非标设备制造企业亟待解决的问题。报…

MySQL Shell 逻辑备份恢复API

MySQL8.0开始提供的MySQL Shell功能,是DBA推向了另一个高度,除SQL外,正式踏入Cloud数据库服务 和 shell操作数据库领域(MGR是一个代表点)。 日常DBA工作可以通过MySQL Shell更容易实现。因为MySQL Shell处理用JavaScr…

3、Ubuntu20Server安装远程连接

Ubuntu20Server安装 安装虚拟机virtualbox VMware Workstation Pro 下载Ubuntu安装光驱Get Ubuntu | Download | Ubuntu 都下载完毕准备安装驱动 配置信息 这里用的是Ubuntu Server 一路Done或回车过三关斩六将来到这里 安装到这里,需要修改镜像站点地址,修改为国内的163网易…

Linux文件系统及磁盘命名

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:Java案例分…

Golang 调整视频fps和分辨率 | Golang工具

目录 前言 环境依赖 代码 总结 前言 本文提供将视频修改fps和分辨率的工具方法,一如既往的实用主义。 主要也是学习一下golang使用ffmpeg工具的方式。 环境依赖 ffmpeg环境安装,可以参考我的另一篇文章:windows ffmpeg安装部署_阿良的博…

Vector - VT System - 模拟IO板卡_VT2816

前面介绍了模拟量的输入板卡VT2004,今天我们介绍的这个板卡依然是模拟量的输入,具体使用场景可能要我们根据实际的使用场景去进行选择。VT2004更偏向于激励,而VT2816更偏向于通用模拟量的IO使用,下面我们从功能、参数、硬件结构等…

SpringBoot接入JaCoCo实践代码覆盖率

这里写自定义目录标题参考概述接入静态接入和动态接入参考 SpringBoot接入JaCoCo实践 概述 JaCoCo是面向Java的开源代码覆盖率工具,JaCoCo以Java代理模式运行,它负责在运行测试时检测字节码。 JaCoCo会深入研究每个指令,并显示每个测试过程…