【Redis】10大数据类型之List类型

文章目录

  • 1. List介绍
  • 2. lpush,rpush和lrange
  • 3. lpop和rpop
  • 4. lindex
  • 5. llen
  • 6. lrem
  • 7. ltrim
  • 8. rpoplpush
  • 9. lset
  • 10. linsert

1. List介绍

List(列表)类型用于存储一系列有序的字符串元素。每个列表项都是一个字符串,列表本身是按照插入顺序排序的,这意味着你可以保留元素的插入顺序.

  1. 双向链表:Redis内部使用双向链表实现List,这使得在列表的头部或尾部插入和弹出元素都非常高效,时间复杂度为O(1)。
  2. 有序性:列表中的元素保持插入时的顺序,可以按照索引位置访问元素。
  3. 元素重复:列表允许存储重复的元素。
  4. 长度限制:理论上,一个列表可以包含最多2^32 - 1个元素(大约4294967295个)。
  5. 多种操作:支持多种操作,包括从两端添加/删除元素(LPUSH/RPUSH, LPOP/RPOP),获取指定范围内的元素(LRANGE),以及阻塞式弹出(BLPOP/BRPOP)等。

本文主要讲List类型的常用命令

2. lpush,rpush和lrange

lpush命令 将一个或多个值value插入到列表key的表头。如果key不存在,会在插入值之前创建一个空列表。当多个值被插入时,它们会按照从左到右的顺序入栈。

LPUSH key value [value ...]

rpush与rpush相似,但它是将一个或多个值value插入到列表key的表尾(右侧)。同样,如果key不存在,则先创建空列表。

RPUSH key value [value ...]

lrange返回列表key中指定范围的元素。start和stop是基于0的索引,其中0表示列表的第一个元素,-1表示最后一个元素。如果stop被省略或设置为-1,则返回从start到列表结束的所有元素。

LRANGE key start stop

示例:

127.0.0.1:6379> lpush list1 1 2 3 4 5 # 注意遍历时的顺序
(integer) 5
127.0.0.1:6379> lrange list1 0 -1 
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> rpush list2 1 2 3 4 5# 注意遍历时的顺序
(integer) 5
127.0.0.1:6379> lrange list2 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> 

3. lpop和rpop

lpop移除并返回列表key中的第一个元素或count个元素,这个操作是从列表的左侧(头部)进行的。如果key不存在或者列表为空,命令返回nil。

LPOP key [count]

rpop与LPOP类似,但它是移除并返回列表key中的最后一个元素或倒数count个元素,即从列表的右侧(尾部)进行操作。如果列表不存在或为空,命令也返回nil。

RPOP key [count]

示例:

127.0.0.1:6379> lpop list1 
"5"
127.0.0.1:6379> lpop list1 2
1) "4"
2) "3"
127.0.0.1:6379> lrange list1 0 -1
1) "2"
2) "1"
127.0.0.1:6379> 127.0.0.1:6379> rpop list1 
"1"
127.0.0.1:6379>

4. lindex

lindex返回列表key中,指定index位置的元素。
index参数可以通过正数和负数来指定位置:正数表示从列表开头开始计数的位置,负数则表示从列表结尾开始计数的位置(-1 表示最后一个元素,-2 表示倒数第二个元素,依此类推)

LINDEX key index

示例:

127.0.0.1:6379> lpush list1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lindex list1 0
"5"
127.0.0.1:6379> lindex list1 -1
"1"
127.0.0.1:6379> 

5. llen

LLEN key
# 返回列表key的长度。如果key不存在或者不是一个列表,那么命令返回0。

示例:

127.0.0.1:6379> lrange list1 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> llen list1
(integer) 5
127.0.0.1:6379> 

6. lrem

删除 count 个值等于 value 的元素

LREM key count value

count参数决定了移除操作的方式:

  • 如果count > 0,则从列表的左边开始,移除最多count个与value相等的元素。
  • 如果count < 0,则从列表的右边开始,移除最多count个与value相等的元素。
  • 如果count = 0,则移除列表中所有与value相等的元素。

示例:

127.0.0.1:6379> lpush list1 1 2 3 4 3 2 1
(integer) 7
127.0.0.1:6379> lrem list1 0 2 
(integer) 2 # 1 3 4 3 1
127.0.0.1:6379> lrem list1 1 3
(integer) 1 # 1 4 3 1
127.0.0.1:6379> lrem list1 -1  1
(integer) 1 # 1 4 3
127.0.0.1:6379> lrange list1 0 -1
1) "1"
2) "4"
3) "3"
127.0.0.1:6379> 

7. ltrim

截取列表key,只保留指定范围的元素。
start和stop参数是基于0的索引,其中0是列表的第一个元素,-1是最后一个元素。

LTRIM key start stop 

示例:

127.0.0.1:6379> lpush list1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> ltrim list1 2 4
OK
127.0.0.1:6379> lrange list1 0 -1
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> 

8. rpoplpush

rpoplpush可以原子性地从源列表右侧弹出一个元素,并将该元素插入到目的列表的左侧

RPOPLPUSH [源列表] [目的列表]

注意:这个操作是原子性的,保证了在多客户端环境下操作的完整性,不会因为并发操作而丢失数据。

示例:

127.0.0.1:6379> lpush list1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lpush list2 6 7 8 9 10
(integer) 5
127.0.0.1:6379> rpoplpush list1 list2
"1"
127.0.0.1:6379> lrange list1 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
127.0.0.1:6379> lrange list2 0 -1 
1) "1"
2) "10"
3) "9"
4) "8"
5) "7"
6) "6"
127.0.0.1:6379> 

9. lset

设置列表(list)中的index位置元素。但不会覆盖原本index位置的值

lset key index value

示例:

127.0.0.1:6379> lpush list1 1 2 3
(integer) 3
127.0.0.1:6379> lset list1 1 string
OK
127.0.0.1:6379> lrange list1 0 -1
1) "3"
2) "string"
3) "1"
127.0.0.1:6379> 

10. linsert

LINSERT命令用于在一个列表(list)的已存在元素之前或之后插入一个新的元素。

linsert key BEFORE|AFTER pivot element

示例:

127.0.0.1:6379> lrange list1 0 -1
1) "3"
2) "string"
3) "1"
127.0.0.1:6379> linsert list1 before string list
(integer) 4
127.0.0.1:6379> linsert list1 after string hash
(integer) 5
127.0.0.1:6379> lrange list1 0 -1
1) "3"
2) "list"
3) "string"
4) "hash"
5) "1"
127.0.0.1:6379> 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

项目管理-项目进度管理3/3

项目管理&#xff1a;每天进步一点点~ 活到老&#xff0c;学到老 ヾ(◍∇◍)&#xff89;&#xff9e; 何时学习都不晚&#xff0c;加油 项目进度管理&#xff1a;需掌握 ITTO, 搞懂计算图&#xff0c;问题和解决方案。 项目进度管理6个过程&#xff0c;包括&#xff08;口…

Qt5.15.2安装Android开发环境。

下载Java 8&#xff0c;不要下Java 20 jdk8 安装跟着默认走就行&#xff1a;C:\Program Files\Java 需要将QtCreator的sdk_definitions.json文件修改一下 “cmdline-tools;latest” 修改为 “cmdline-tools;6.0” 在一个非中文路径&#xff0c;建立一个android-sdk-windows空…

MATLAB 微积分

MATLAB 微积分 MATLAB提供了多种方法来解决微分和积分问题&#xff0c;求解任意程度的微分方程式以及计算极限。最重要的是&#xff0c;您可以轻松求解复杂函数的图&#xff0c;并通过求解原始函数及其导数来检查图上的最大值&#xff0c;最小值和其他文具点。 本章将讨论微…

AD中如何器件带动导线一起旋转

选中器件和导线&#xff0c;右键点击联合&#xff0c;从选中的器件生成联合 点击屏幕右上角的小齿轮&#xff08;设置按钮&#xff09;&#xff0c;选择下图所示的旋转步进为45度&#xff08;或其他&#xff09;&#xff0c;器件拖拽设置为Connected Tracks 之后就可以按住空格…

从零开始搭建一个vue项目

从零开始搭建一个vue项目 一、环境准备 1.1 安装node.js 选择合适的LTS版本&#xff0c;然后下载安装&#xff0c;安装地址&#xff1a;https://nodejs.org/en/download 在命令行中查看已安装的node.js版本 node -v v14.14.01.2 切换为淘宝的镜像源 解决国内下载慢的问题,…

【数据结构(邓俊辉)学习笔记】向量06——位图

文章目录 0.概述1.结构2.实现3. 应用3.1 去重3.2 筛法 0.概述 位图&#xff08;Bitmap&#xff09;是一种特殊的序列结构&#xff0c;可用以动态地表示由一组&#xff08;无符号&#xff09;整数构成的集合。 test() 判断k 是否存在集合S中。set() 将k 加入到集合S中。clear…

免费APP分发平台 - 一个指南和解析

数字化时代的APP分发平台 随着数字化进程的加速免费APP分发平台 - 一个指南和解析&#xff0c;移动应用&#xff08;APP&#xff09;市场正迅速扩大。在这个充满竞争的市场中免费APP分发平台 - 一个指南和解析&#xff0c;一个优秀的APP分发平台能够帮助开发者和商家更有效地触…

【matlab基础知识】(三)二维曲线绘制plot

x[-pi:0.0001:pi]; 选择较小步距 ysin(tan(x))-tan(sin(x));plot(x,y) 条件和函数值做一个点乘 x[-2:0.02:2];y1.1*sign(x).*(abs(x)>1.1)x.*(abs(x)<1.1);plot(x,y) 颜色&#xff0c;线形&#xff0c;曲线上的标志 由于0.01cosx波动太小&#xff0c;所以plotyy绘制多…

蓝桥杯练习系统(算法训练)ALGO-949 勇士和地雷阵

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 勇士们不小心进入了敌人的地雷阵&#xff08;用n行n列的矩阵表示&#xff0c;*表示某个位置埋有地雷&#xff0c;-表示某个…

可视化大屏C位图:智慧场馆/场所图

Hello&#xff0c;我是大千UI工场&#xff0c;本期可视化大屏的焦点图&#xff08;C位&#xff09;分享将场馆作为焦点图的情形&#xff0c;欢迎友友们关注、评论&#xff0c;如果有订单可私信。 智慧场馆是指通过物联网、大数据、人工智能等技术手段&#xff0c;将传统场馆与…

ctfshow crypto rsa部分题目简单题解

easyrsa1 下载点击打开附件 e 65537 n 1455925529734358105461406532259911790807347616464991065301847 c 69380371057914246192606760686152233225659503366319332065009 题目中给了e,n,c的值。 使用在线网址factordb.com 分解n得到p&#xff0c;q 编写脚本 import gm…

Java项目:基于SSM框架实现的在线医疗服务系统(ssm+B/S架构+源码+数据库+毕业论文+开题报告)

一、项目简介 本项目是一套基于SSM框架实现的在线医疗服务系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、功能…

为什么 IP 地址通常以 192.168 开头?(精简版)

网络通讯的本质就是收发数据包。如果说收发数据包就跟收发快递一样。IP地址就类似于快递上填的收件地址和发件地址一样&#xff0c;路由器就充当快递员的角色&#xff0c;在这个纷繁复杂的网络世界里找到该由谁来接收这个数据包&#xff0c;所以说&#xff1a;IP地址就像快递里…

Java 获取 Outlook 邮箱的日历事件

Java 获取 Outlook 邮箱的日历事件 1.需求描述2.实现方案3.运行结果 IDE&#xff1a;IntelliJ IDEA 2022.3.3 JDK&#xff1a;1.8.0_351 Outlook&#xff1a;Microsoft Office 2016 1.需求描述 比如现在需要获取 Outlook 邮箱中四月的全部的会议安排&#xff0c;如下图所示 …

从零开始搭建Springboot项目脚手架1:新建项目

1、技术栈 SpringBoot 3.2.5&#xff1a; 2、 新建项目 使用SpringInitializr 选择Lombok、Configuration Processor、Spring Web&#xff0c;同时IDEA也要安装Lombok插件 删除多余的Maven目录、Maven文件&#xff0c;把HELP.md改成README.md。 当然前提是已经安装好Maven和配…

【JVM】Java工具(Arthas,APM,Java Agent,JMX)

Java工具 常见的Java工具有以下几类&#xff1a; 1、诊断类工具&#xff0c;如Arthas、VisualVM等。 2、开发类工具&#xff0c;如Idea、Eclipse。 3、APM应用性能监测工具&#xff0c;如Skywalking、Zipkin等。 4、热部署工具&#xff0c;如Jrebel等。 Arthas中 Java Ag…

[笔试训练](十二)

目录 034:删除公共字符串 035:两个链表的第一个公共节点 036:mari和shiny 034:删除公共字符串 删除公共字符_牛客题霸_牛客网 (nowcoder.com) 题解: 用哈希记录好第二个字符串中的字符&#xff0c;再遍历一遍第一个字符串&#xff0c;只将没有记录的字符加在结果字符串上。…

ASP.NET网络在线考试系统

摘 要 随着计算机技术的发展和互联网时代的到来&#xff0c;人们已经进入了信息时代&#xff0c;也有人称为数字化时代。数在数字化的网络环境下&#xff0c;学生希望得到个性化的满足&#xff0c;根据自己的情况进行学习&#xff0c;同时也希望能够得到科学的评价&#xff0c…

文件API及其操作

这里介绍两类文件操作、三个文件类。包括文件系统操作&#xff08;File类&#xff09;、文件内容操作&#xff08;操作字节流、操作字符流&#xff09; 1.文件类File 1.1.认识File类 &#xff08;1&#xff09;什么是File类呢&#xff1f;其实就是可以操作文件的一个类。通过…

STM32数字示波器+详细注释+上位机程序+硬件

目录 1、设计指标&#xff1a; 2、功能&#xff1a; 3、上位机的程序 ​4、测试的照片 5、PCB 6、模拟电路板 7、程序 资料下载地址&#xff1a;STM32数字示波器详细注释上位机程序硬件 1、设计指标&#xff1a; 主控: STM32…
最新文章