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

相关推荐
Better Rose1 小时前
【数模国奖冲刺】备赛过程中的常见问题
经验分享·数学建模·数模国赛
浮灯Foden1 小时前
算法-每日一题(DAY13)两数之和
开发语言·数据结构·c++·算法·leetcode·面试·散列表
丘大梨1 小时前
QT 基础聊天应用项目文档
运维·数据库·系统架构
HMBBLOVEPDX2 小时前
MySQL的多版本并发控制(MVCC):
数据库·mysql·mvcc
TT哇2 小时前
@[TOC](计算机是如何⼯作的) JavaEE==网站开发
java·redis·java-ee
.用户昵称已存在.2 小时前
MongoDB 从入门到精通:安装配置与基础操作指令详解
数据库·mongodb
ClouGence3 小时前
CloudDM 新增支持 GaussDB 与 openGauss:国产数据库管理更高效
数据库·sql·ci/cd
sukalot3 小时前
window显示驱动开发—在混合系统中使用跨适配器资源
数据库·驱动开发·音视频
洛卡卡了3 小时前
数据库加密方案实践:我们选的不是最完美,但是真的够用了。
数据库·后端·面试