目录

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

本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
我是个假程序员3 小时前
sql server数据库可疑修复
数据库
极限实验室5 小时前
如何使用 Nginx 代理 Easysearch 服务
数据库·nginx
whn19775 小时前
selectdb修改表副本
数据库
TDengine (老段)6 小时前
TDengine 中的视图
数据库·物联网·oracle·时序数据库·tdengine·iotdb
赵谨言6 小时前
大模型如何优化数字人的实时交互与情感表达
经验分享·毕业设计
ylfhpy6 小时前
Java面试黄金宝典33
java·开发语言·数据结构·面试·职场和发展·排序算法
Kyrie_Li6 小时前
Redis-Sentinel(哨兵模式)
数据库·redis·sentinel
计算机毕设定制辅导-无忧学长7 小时前
TDengine 数据写入优化:协议选择与批量操作(一)
网络·数据库·tdengine
Mr.洛 白7 小时前
OpenEuler/CentOS一键部署OpenGauss数据库教程(脚本+视频)
数据库·opengauss·gaussdb·国产数据库安装·安装脚本
炬火初现8 小时前
redis-cpp-cpp如何使用lua脚本
数据库·redis·lua