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列表命令详解(命令用法详解+思维导图详解) 的全部内容了,希望能对你有所帮助!你的点赞收藏关注是对我最大的支持!

相关推荐
Hacker_LaoYi9 分钟前
【渗透技术总结】SQL手工注入总结
数据库·sql
岁月变迁呀11 分钟前
Redis梳理
数据库·redis·缓存
独行soc11 分钟前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
你的微笑,乱了夏天1 小时前
linux centos 7 安装 mongodb7
数据库·mongodb
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭1 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
工业甲酰苯胺1 小时前
分布式系统架构:服务容错
数据库·架构
菜鸡中的奋斗鸡→挣扎鸡2 小时前
滑动窗口 + 算法复习
数据结构·算法
独行soc2 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘
White_Mountain2 小时前
在Ubuntu中配置mysql,并允许外部访问数据库
数据库·mysql·ubuntu
Code apprenticeship2 小时前
怎么利用Redis实现延时队列?
数据库·redis·缓存