百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Redis 常用数据类型之list(字符串列表)

mhr18 2024-11-13 10:59 19 浏览 0 评论

list 字符串列表的特性

Redis list 列表是简单的字符串列表,按照插入顺序排序。我们可以添加元素在列表的头部(左边)或者尾部(右边),就是类似于一个双端列表。

如果是从数组的两端开始删除数据,则会比较快,如果是从中间开始删除,就会比较慢。类似于我们 Java ArrayList使用数组的方式,同事也具有 LinkedList 双向连接的方式。


表的特性


Redis list 列表是简单的字符串列表,按照插入顺序排序。我们可以添加元素在列表的头部(左边)或者尾部(右边),就是类似于一个双端列表。


如果是从数组的两端开始删除数据,则会比较快,如果是从中间开始删除,就会比较慢。类似于我们 Java ArrayList使用数组的方式,同事也具有 LinkedList 双向连接的方式。


list 相关命令


list 相关的命令都是 以 "l" 开头,表示 list 类型的操作,redis 中并不区分命令的大小写。


操作

命令

例子

说明

从左侧添加

lpush

lpush key v1 v2 v3


从右侧添加

rpush

rpush key v1 v2 v3


查看元素

lrange

lrange key 0 -2

0为查看的开始位置, -2为查看到倒数第二个(如果数组的长度为5,即显示前三个);

lrange key 0 -1, 表示查看所有的元素值

从头部弹出元素

lpop

lpop key

执行弹出操作后,弹出元素将不存在与key中

从尾部弹出元素

rpop

rpop key

执行弹出操作后,弹出元素将不存在与key中

查看数组的长度

llen

llen key

返回数组的长度,如果说数组不存在,那么返回0

向存在的数组的左边插入值

lpushx

lpush key value

如果数组key 不存在,则不会插入值,并且返回一个0

向存在的数组的右边插入值

rpushx

rpush key value

如果数组key 不存在,则不会插入值,并且返回一个0

删除数组中的值

lrem

lrem key count value

向集合中删除 count个值,比如:

  • lrem mylist 2 3, 指的是从前到后,删除2个,值为 3 的 value 值
  • lrem mylist -2 3, 指的是从后到前,删除2个,值为 3 的 value 值
  • lrem mylist 0 3, 指的删除 所有 值为 3 的 value 值

向指定下标处插入值

lset

lset key index value

向数组中下标值为 index 的插入一个元素 value

例如: lset mylist 3 mmm

向指定值的地方插入

linsert

linsert key before value newValue

向数组中值为 value 前面插入 newValue

linsert key after value newValue

向数组中值为 value 后面插入 newValue

将列表中尾部的数据弹出,添加到头部

rpoplpush

rpoplpush mylist1 mylist2

将 mylist1 中的最后一个元素弹出,并且压入到 ,mylist2 中的头部


详细说明


常用操作(lpush、rpush、lrange)


127.0.0.1:6379> lpush index 1 2 3 4        # 从左边插入新的元素,按照数据插入顺序新增
(integer) 4
127.0.0.1:6379> lpush index 0 -1           # 再从左边添加新的元素
(integer) 6
127.0.0.1:6379> lrange index 0 -1          # 查看数组中的元素(0 到 -1 表示所有的)
1) "-1"
2) "0"
3) "4"
4) "3"
5) "2"
6) "1"
127.0.0.1:6379> rpush index a b c         # 从右边添加元素
(integer) 9
127.0.0.1:6379> lrange index 0 -1         # 再次查看添加的元素
1) "-1"
2) "0"
3) "4"
4) "3"
5) "2"
6) "1"
7) "a"
8) "b"
9) "c"
127.0.0.1:6379>



弹出元素操作(lpop、rpop)


127.0.0.1:6379> lpush list one two three four five        # 添加元素
(integer) 5
127.0.0.1:6379> lrange list 0 -1                          # 查看添加的元素
1) "five"
2) "four"
3) "three"
4) "two"
5) "one"
127.0.0.1:6379> lpop list                                 # 移除 list 中的第一个元素
"five"
127.0.0.1:6379> rpop list                                 # 移除 list 中的最后一个元素
"one"
127.0.0.1:6379> lrange list 0 -1
1) "four"
2) "three"
3) "two"
127.0.0.1:6379>



删除操作(lrem)


具体查询上面表格中说明的部分


127.0.0.1:6379>  lpush mylist  3 2 1 0 2 3 1 
(integer) 7
127.0.0.1:6379> lrange mylist 0 -1
1) "1"
2) "3"
3) "2"
4) "0"
5) "1"
6) "2"
7) "3"
127.0.0.1:6379> lrem mylist -1 1                #  从后到前,删除 1个值为 1 的元素
(integer) 1
127.0.0.1:6379> lrange mylist 0 -1              # 查看
1) "1"
2) "3"
3) "2"
4) "0"
5) "2"
6) "3"
127.0.0.1:6379> lrem mylist 1 3                 # 从前到后,删除 1 个值为 3 的元素
(integer) 1
127.0.0.1:6379> lrange mylist 0 -1
1) "1"
2) "2"
3) "0"
4) "2"
5) "3"
127.0.0.1:6379> lrem mylist 0 3                 # 删除所有值为 3 的元素
(integer) 1
127.0.0.1:6379> lrem mylist 0 2                 # 删除所有值为 2 的元素
(integer) 2
127.0.0.1:6379> lrange mylist 0 -1
1) "1"
2) "0"
127.0.0.1:6379>



索引与长度(lindex、llen)


127.0.0.1:6379> lpush list 1 2 3 4
(integer) 4
127.0.0.1:6379> llen list                # 查看数组的长度
(integer) 4
127.0.0.1:6379> lindex list 0            # 通过指定的下标来获取值
"4"
127.0.0.1:6379> lindex list 2
"2"
127.0.0.1:6379>



更新与修剪操作(lset、ltrim)


127.0.0.1:6379> rpush list one two three four
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
127.0.0.1:6379> lset list 0 4                # 将下标为0 的元素值,修改为 4
OK
127.0.0.1:6379> lrange list 0 -1
1) "4"
2) "two"
3) "three"
4) "four"
127.0.0.1:6379> lindex list 3                # 根据指定的下标获取元素值
"four"
127.0.0.1:6379>



特殊操作(rpoplpush)


127.0.0.1:6379> lpush list msg1 msg2 msg3 msg4 msg5
(integer) 5
# 移除list 中的最后一个元素,添加到 listbak 中,
# 这里 listbak 之前并不存在,在执行了这个操作之后,会自动创建
127.0.0.1:6379> rpoplpush list listbak        
"msg1"
127.0.0.1:6379> lrange list 0 -1                  # 查看原有的数组值
1) "msg5"
2) "msg4"
3) "msg3"
4) "msg2"
127.0.0.1:6379> lrange listbak 0 -1               # 新的数组值
1) "msg1"
127.0.0.1:6379>

相关推荐

Dubai's AI Boom Lures Global Tech as Emirate Reinvents Itself as Middle East's Silicon Gateway

AI-generatedimageAsianFin--Dubaiisrapidlytransformingitselffromadesertoilhubintoaglob...

OpenAI Releases o3-pro, Cuts o3 Prices by 80% as Deal with Google Cloud Reported to Make for Compute Needs

TMTPOST--OpenAIisescalatingthepricewarinlargelanguagemodel(LLM)whileseekingpartnershi...

黄仁勋说AI Agent才是未来!但究竟有些啥影响?

,抓住风口(iOS用户请用电脑端打开小程序)本期要点:详解2025年大热点你好,我是王煜全,这里是王煜全要闻评论。最近,有个词被各个科技大佬反复提及——AIAgent,智能体。黄仁勋在CES展的发布...

商城微服务项目组件搭建(五)——Kafka、Tomcat等安装部署

1、本文属于mini商城系列文档的第0章,由于篇幅原因,这篇文章拆成了6部分,本文属于第5部分2、mini商城项目详细文档及代码见CSDN:https://blog.csdn.net/Eclipse_...

Python+Appium环境搭建与自动化教程

以下是保姆级教程,手把手教你搭建Python+Appium环境并实现简单的APP自动化测试:一、环境搭建(Windows系统)1.安装Python访问Python官网下载最新版(建议...

零配置入门:用VSCode写Java代码的正确姿

一、环境准备:安装JDK,让电脑“听懂”Java目标:安装Java开发工具包(JDK),配置环境变量下载JDKJava程序需要JDK(JavaDevelopmentKit)才能运行和编译。以下是两...

Mycat的搭建以及配置与启动(mycat2)

1、首先开启服务器相关端口firewall-cmd--permanent--add-port=9066/tcpfirewall-cmd--permanent--add-port=80...

kubernetes 部署mysql应用(k8s mysql部署)

这边仅用于测试环境,一般生产环境mysql不建议使用容器部署。这里假设安装mysql版本为mysql8.0.33一、创建MySQL配置(ConfigMap)#mysql-config.yaml...

Spring Data Jpa 介绍和详细入门案例搭建

1.SpringDataJPA的概念在介绍SpringDataJPA的时候,我们首先认识下Hibernate。Hibernate是数据访问解决技术的绝对霸主,使用O/R映射(Object-Re...

量子点格棋上线!“天衍”邀您执子入局

你是否能在策略上战胜量子智能?这不仅是一场博弈更是一次量子智力的较量——量子点格棋正式上线!试试你能否赢下这场量子智局!游戏玩法详解一笔一画间的策略博弈游戏目标:封闭格子、争夺领地点格棋的基本目标是利...

美国将与阿联酋合作建立海外最大的人工智能数据中心

当地时间5月15日,美国白宫宣布与阿联酋合作建立人工智能数据中心园区,据称这是美国以外最大的人工智能园区。阿布扎比政府支持的阿联酋公司G42及多家美国公司将在阿布扎比合作建造容量为5GW的数据中心,占...

盘后股价大涨近8%!甲骨文的业绩及指引超预期?

近期,美股的AI概念股迎来了一波上升行情,微软(MSFT.US)频创新高,英伟达(NVDA.US)、台积电(TSM.US)、博通(AVGO.US)、甲骨文(ORCL.US)等多股亦出现显著上涨。而从基...

甲骨文预计新财年云基础设施营收将涨超70%,盘后一度涨8% | 财报见闻

甲骨文(Oracle)周三盘后公布财报显示,该公司第四财季业绩超预期,虽然云基建略微逊于预期,但管理层预计2026财年云基础设施营收预计将增长超过70%,同时资本支出继上年猛增三倍后,新财年将继续增至...

Springboot数据访问(整合MongoDB)

SpringBoot整合MongoDB基本概念MongoDB与我们之前熟知的关系型数据库(MySQL、Oracle)不同,MongoDB是一个文档数据库,它具有所需的可伸缩性和灵活性,以及所需的查询和...

Linux环境下,Jmeter压力测试的搭建及报错解决方法

概述  Jmeter最早是为了测试Tomcat的前身JServ的执行效率而诞生的。到目前为止,它的最新版本是5.3,其测试能力也不再仅仅只局限于对于Web服务器的测试,而是涵盖了数据库、JM...

取消回复欢迎 发表评论: