Redis五大基本类型——List列表命令详解(命令用法详解+思维导图详解)

目录

一、List列表类型介绍

二、常见命令

1、LPUSH

2、LPUSHX

3、RPUSH

4、RPUSHX

5、LRANGE

6、LPOP

7、RPOP

8、LREM

9、LSET

10、LINDEX

11、LINSERT

12、LLEN

13、阻塞版本命令

·BLPOP

·BRPOP

三、命令小结

相关内容:

Redis五大基本类型------Hash哈希命令详解(命令用法详解+思维导图详解)-CSDN博客

Redis五大基本类型------String字符串命令详解(命令用法详解+思维导图详解)_redis 字符串-CSDN博客


一、List列表类型介绍

列表类型用来存储多个有序的字符串,列表中的每个字符串称为元素,一个列表最多可以存储2^32-1个元素。在Redis中,可以对列表两端插入(push)和弹出(pop),还可以获取指定范围的元素列表,获取指定索引下标的元素等。

列表是一种很灵活的数据结构,它可以充当栈和队列的角色。

列表类型的特点:

1、列表中的元素是有序的,这里的有序指的并不是元素会自动按升序/降序 排序,而是元素根据插入的顺序是有序的。这意味着可以通过索引下标获取某个元素或某个范围的元素。

2、列表中的元素是允许重复的。

3、获取与删除不同,获取不会改变列表长度,删除会改变列表长度。

二、常见命令

1、LPUSH

将一个或多个元素从左侧放入到 list 中,可以理解为头插。

语法:

LPUSH key element element ...

返回值:

插入后 list 的长度

示例:

复制代码
127.0.0.1:6379> LPUSH key 111
(integer) 1
127.0.0.1:6379> LPUSH key 222 333 444
(integer) 4
127.0.0.1:6379> LPUSH key 111
(integer) 5
127.0.0.1:6379> LRANGE key 0 -1
1) "111"
2) "444"
3) "333"
4) "222"
5) "111"

2、LPUSHX

当key存在的时候,将一个或多个元素从左侧放入(头插)到 list 中,若key不存在,则直接返回。

语法:

LPUSHX key element element ...

返回值:

插入后 list 的长度

示例:

复制代码
127.0.0.1:6379> LPUSHX key 111 222 333
(integer) 0
127.0.0.1:6379> LPUSH key 111
(integer) 1
127.0.0.1:6379> LPUSHX key 111 222 333
(integer) 4
127.0.0.1:6379> LRANGE key 0 -1
1) "333"
2) "222"
3) "111"
4) "111"

3、RPUSH

将一个或多个元素从右侧放入到 list 中,可以理解为尾插。

语法:

RPUSH key element element ...

返回值:

插入后 list 的长度

示例:

复制代码
127.0.0.1:6379> RPUSH rkey 111 222 333
(integer) 3
127.0.0.1:6379> RPUSH rkey 444
(integer) 4
127.0.0.1:6379> LRANGE rkey 0 -1
1) "111"
2) "222"
3) "333"
4) "444"

4、RPUSHX

当key存在的时候,将一个或多个元素从右侧放入(尾插)到 list 中,若key不存在,则直接返回。

语法:

RPUSHX key element element ...

返回值:

插入后 list 的长度

示例:

复制代码
127.0.0.1:6379> RPUSHX key 111
(integer) 0
127.0.0.1:6379> RPUSH key 111
(integer) 1
127.0.0.1:6379> RPUSHX key 111
(integer) 2
127.0.0.1:6379> RPUSHX key 222 333
(integer) 4
127.0.0.1:6379> LRANGE key 0 -1
1) "111"
2) "111"
3) "222"
4) "333"

5、LRANGE

获取从 start 到 end 区间的所有元素,左闭右闭。

语法:

LRANGE key start stop

返回值:

查询到的指定区间的元素

示例:

复制代码
127.0.0.1:6379> RPUSH mykey 111 222 333 444 555 666
(integer) 6
127.0.0.1:6379> LRANGE mykey 0 -1
1) "111"
2) "222"
3) "333"
4) "444"
5) "555"
6) "666"
127.0.0.1:6379> LRANGE mykey -6 -1
1) "111"
2) "222"
3) "333"
4) "444"
5) "555"
6) "666"
127.0.0.1:6379> LRANGE mykey 2 4
1) "333"
2) "444"
3) "555"
127.0.0.1:6379> LRANGE key 0 -1 #key不存在
(empty array)

6、LPOP

从 list 左侧取出元素,即头删。

语法:

LPOP key

返回值:

取出的元素或者 nil

示例:

复制代码
127.0.0.1:6379> LRANGE mykey 0 -1
1) "111"
2) "222"
3) "333"
4) "444"
5) "555"
6) "666"
127.0.0.1:6379> LPOP mykey
"111"
127.0.0.1:6379> LRANGE mykey 0 -1
1) "222"
2) "333"
3) "444"
4) "555"
5) "666"
127.0.0.1:6379> LPOP mykey
"222"
127.0.0.1:6379> LPOP mykey
"333"
127.0.0.1:6379> LPOP mykey
"444"
127.0.0.1:6379> LPOP mykey
"555"
127.0.0.1:6379> LPOP mykey
"666"
127.0.0.1:6379> LPOP mykey
(nil)
127.0.0.1:6379> LRANGE mykey 0 -1
(empty array)

7、RPOP

从 list 右侧取出元素,即尾删。

语法:

RPOP key

返回值:

取出的元素或者 nil

示例:

复制代码
127.0.0.1:6379> LRANGE mykey 0 -1
1) "111"
2) "222"
3) "333"
4) "444"
5) "555"
6) "666"
127.0.0.1:6379> RPOP mykey
"666"
127.0.0.1:6379> LRANGE mykey 0 -1
1) "111"
2) "222"
3) "333"
4) "444"
5) "555"
127.0.0.1:6379> RPOP mykey
"555"
127.0.0.1:6379> RPOP mykey
"444"
127.0.0.1:6379> RPOP mykey
"333"
127.0.0.1:6379> RPOP mykey
"222"
127.0.0.1:6379> RPOP mykey
"111"
127.0.0.1:6379> RPOP mykey
(nil)
127.0.0.1:6379> LRANGE mykey 0 -1
(empty array)

8、LREM

删除指定个数的某个元素。

语法:

LREM key count element

返回值:

删除成功的个数

示例:

复制代码
127.0.0.1:6379> RPUSH mykey 111 222 222 333 333 333
(integer) 6
127.0.0.1:6379> LRANGE mykey 0 -1
1) "111"
2) "222"
3) "222"
4) "333"
5) "333"
6) "333"
127.0.0.1:6379> LREM mykey 1 111
(integer) 1
127.0.0.1:6379> LREM mykey 1 222
(integer) 1
127.0.0.1:6379> LREM mykey 2 333
(integer) 2
127.0.0.1:6379> LRANGE mykey 0 -1
1) "222"
2) "333"

9、LSET

设置并覆盖指定位置的值。

语法:

LSET key index element

返回值:

成功返回OK,如果设置超出范围则报错

示例:

cpp 复制代码
127.0.0.1:6379> RPUSH mykey 111 222 333 444 555 666
(integer) 6
127.0.0.1:6379> LSET mykey 0 0
OK
127.0.0.1:6379> LSET mykey -1 0
OK
127.0.0.1:6379> LSET mykey 3 0
OK
127.0.0.1:6379> LSET mykey 10 0
(error) ERR index out of range
127.0.0.1:6379> LRANGE mykey 0 -1
1) "0"
2) "222"
3) "333"
4) "0"
5) "555"
6) "0"

10、LINDEX

获取从左数第 index 位的元素。

语法:

LINDEX key index

返回值:

查询到的指定的元素或者 nil

示例:

复制代码
127.0.0.1:6379> LRANGE mykey 0 -1
1) "111"
2) "222"
3) "333"
4) "444"
5) "555"
6) "666"
127.0.0.1:6379> LINDEX mykey 0
"111"
127.0.0.1:6379> LINDEX mykey -1
"666"
127.0.0.1:6379> LINDEX mykey 2
"333"
127.0.0.1:6379> LINDEX mykey 10
(nil)
127.0.0.1:6379> LRANGE mykey 0 -1
1) "111"
2) "222"
3) "333"
4) "444"
5) "555"
6) "666"

注意:

获取与取出不同。获取只是得到这个元素的值,并不会删除;取出是得到这个元素的值,并且删除。

11、LINSERT

在特定的位置插入元素。

语法:

LINSERT key BEFORE|AFTER pivot element

返回值:

插入后 list 的长度

示例:

复制代码
127.0.0.1:6379> lpush mykey 111
(integer) 1
127.0.0.1:6379> LINSERT mykey before 111 000
(integer) 2
127.0.0.1:6379> LINSERT mykey after 111 222
(integer) 3
127.0.0.1:6379> LRANGE mykey 0 -1
1) "000"
2) "111"
3) "222"

12、LLEN

获取 list 的长度。

语法:

LLEN key

返回值:

list 的长度

示例:

复制代码
127.0.0.1:6379> lrange mykey 0 -1
1) "000"
2) "111"
3) "222"
127.0.0.1:6379> LLEN mykey
(integer) 3
127.0.0.1:6379> rpush mykey 333 444 555
(integer) 6
127.0.0.1:6379> LLEN mykey
(integer) 6

13、阻塞版本命令

BLPOP 和 BRPOP是 LPOP 和 RPOP 的阻塞版本。阻塞版本和非阻塞版本的作用基本一致,二者异同点:

**·**在列表中有元素的前提下,阻塞版本和非阻塞版本的作用一致。

**·**如果列表中没有元素,非阻塞版本会立即返回nil,阻塞版本会根据timeout,阻塞一段时间。期间 redis 可以执行其他命令,但要求执行该命令的客户端会表现为阻塞状态。

命令中如果设置了多个键,那么会从左到右遍历键,一旦有一个键对应的列表中可以弹出元素,命令立即返回并结束阻塞状态。

·BLPOP

LPOP的阻塞版本。

语法:

BLPOP key key ... timeout

返回值:

取出的元素或者 nil

示例:

在列表中没元素的情况下

·BRPOP

RPOP的阻塞版本。

语法:

BRPOP key key ... timeout

返回值:

取出的元素或者 nil

用法:使用方法与BLPOP的相同

三、命令小结


以上就是 Redis五大基本类型------List列表命令详解(命令用法详解+思维导图详解) 的全部内容了,希望能对你有所帮助!你的点赞收藏关注是对我最大的支持!

相关推荐
ClouGence27 分钟前
跨云、跨地域数据同步,这样更省心
数据库·sql·saas
TDengine (老段)1 小时前
TDengine 函数完整参考 — 聚合、时序、字符串、时间、数学
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
浩瀚地学1 小时前
【面试算法笔记】0302-哈希表-哈希表实现
java·经验分享·笔记·算法·面试
Frostnova丶2 小时前
(17)LeetCode 41. 缺失的第一个正数
数据结构·算法·leetcode
TDengine (老段)2 小时前
昆仑数智选择 TDengine TSDB,提升页岩气生产运行可视化与精细化管理能力
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
陆水A2 小时前
【问数系统】SQL跑对了图表却空了?打通问数系统最后1公里的3个API坑
大数据·数据库·自然语言处理·big data·etl工程师
海外数字观察家2 小时前
品未云:泰国华商批发零售一体化 ERP,破解本土软件适配难题|CSDN 技术分享
网络·数据库·人工智能
躺不平的理查德3 小时前
SQLite C API 备忘录
c语言·数据库·sqlite
陳陈陳3 小时前
LLM的"消化系统":一文讲透RAG文档加载与智能切割
数据库·langchain·llm
IvorySQL3 小时前
云环境下PostgreSQL的Cgroup内存管理实践
java·数据库·postgresql