Redis | Redis 列表相关命令

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis | Redis 列表相关命令

       Redis 支持多种数据结构,比如 字符串、列表、集合、有序集合 和 哈希 等数据结构。本次我整理了关于 列表 相关的命令,也就是关于 List 相关的命令,如下图。

    上图中用红色圈中的部分,就是关于 列表 相关的命令。如果想要在 Redis 中查看相关的命令也可以使用 help 命令来进行查看,命令如下。

127.0.0.1:6379> help @list

      在按下回车后,可以看到相应分类命令的说明,如下图。

       图中就是部分关于 List 相关的部分命令。

常用 List 相关命令

       List 数据类型是 Key 对应的 Value 的类型,在 Redis 中所有的 Key 都是字符串,所谓的数据类型表示的是 Value 的类型。在 List 中的 Value 是一个列表,列表的顺序是数据存入时的顺序,且列表中的元素可以是重复的。


       为了大家能够直接复制命令进行测试,下面我就不截图了。

1、lpush 命令

      在 列表 的左侧添加元素,成功返回当前列表的长度。

1. 127.0.0.1:6379> lpush key java
2. (integer) 1

      lpush 一次可以给 key 添加多个 value

1. 127.0.0.1:6379> lpush key python php c
2. (integer) 4

   观察它的返回值是 4 ,表示列表的当前长度为 4。

1. 127.0.0.1:6379> lpush key c++
2. (integer) 5

      再添加一个 value 进行观察,当前列表的长度为 5。

2、rpush 命令

      在 列表 的右侧添加元素,用法和 lpush 相同。

127.0.0.1:6379> rpush key rust
(integer) 6
127.0.0.1:6379> rpush key asm scala
(integer) 8

3、llen 命令

      返回列表的当前长度

127.0.0.1:6379> llen key
(integer) 8

4、lrange 命令

     查看列表指定范围的值

127.0.0.1:6379> lrange key 0 3
1) "c++"
2) "c"
3) "php"
4) "python"

       列表的索引从 0 开始,上面查看的是从 索引 0 到 索引 3 范围内的值。

      如果想查看所有的值,可以通过正负索引来进行查看。

127.0.0.1:6379> lrange key 0 -1
1) "c++"
2) "c"
3) "php"
4) "python"
5) "java"
6) "rust"
7) "asm"
8) "scala"

     列表最后一个元素的索引为 -1,上面就是从第一个元素到最后一个元素的值都进行了显示。

127.0.0.1:6379> lrange key -3 -1
1) "rust"
2) "asm"
3) "scala"

      上面的也是可以。key 后面的参数分别是 start 和 end,因此 start 值的位置如果大于 end 的值位置,那么就无法进行查看了。

5、ltrim 命令

      ltrim 是用于截取列表内元素的命令。

127.0.0.1:6379> ltrim key 0 5
OK
127.0.0.1:6379> lrange key 0 -1
1) "c++"
2) "c"
3) "php"
4) "python"
5) "java"
6) "rust"

      上面使用 ltrim 命令对列表进行了截取,保留了索引从 0 到 5 位置的元素,因为用 lrange 进行查看时,只保留了 6 个元素,另外两个元素已经从列表中被移除了。

6、lset 命令

      lset 命令用来修改指定索引位置元素的值。

127.0.0.1:6379> lset key 1 oc
OK
127.0.0.1:6379> lrange key 0 -1
1) "c++"
2) "oc"
3) "php"
4) "python"
5) "java"
6) "rust"

      可以看到 索引 为 1 的元素被修改为了 oc。

7、lrem 命令

      删除列表中的元素,命令的格式为:

lrem key count value

      我们再添加几个值为 php 的元素

127.0.0.1:6379> rpush key php vb php
(integer) 9
127.0.0.1:6379> lrange key 0 -1
1) "c++"
2) "oc"
3) "php"
4) "python"
5) "java"
6) "rust"
7) "php"
8) "vb"
9) "php"

      列表中可以保存重复的元素,这里使用 rpush 添加了两个 php 的元素,现在来删除最后的一个 php。

127.0.0.1:6379> lrem key -1 php
(integer) 1
127.0.0.1:6379> lrange key 0 -1
1) "c++"
2) "oc"
3) "php"
4) "python"
5) "java"
6) "rust"
7) "php"
8) "vb"

      可以看到,最后面的 php 元素已经被删除了

      再来删除第一个 php

127.0.0.1:6379> lrem key 1 php
(integer) 1
127.0.0.1:6379> lrange key 0 -1
1) "c++"
2) "oc"
3) "python"
4) "java"
5) "rust"
6) "php"
7) "vb"

        可以看到,第一个 php 的元素被删除了

        如果想要删除所有值为 php 的元素,那么就将 count 设置为 0 即可。

127.0.0.1:6379> lrem key 0 php
(integer) 1

      因为列表中只剩一个值为 php 的元素,因此只删除掉一个。如果有多个的话,那么会删除多个。

8、lpop 命令

       从列表的左侧弹出一个值

127.0.0.1:6379> lpop key
"c++"
127.0.0.1:6379> lrange key 0 -1
1) "oc"
2) "python"
3) "java"
4) "rust"
5) "vb"

       可以看到列表中最开始的 c++ 已经从列表中出来了

9、rpop 命令

      从列表的右侧弹出一个值

127.0.0.1:6379> rpop key
"vb"
127.0.0.1:6379> lrange key 0 -1
1) "oc"
2) "python"
3) "java"
4) "rust"

      可以看到列表中最后面的 vb 已经从列表中。

10、blpop 命令

      blpop 命令的格式如下:

blpop key [key ...] timeout

      该命令的作用是在 非空列表 的左侧弹出一个值,如果都为空列表,则阻塞 timeout 秒

      我们同时开两个 Redis 的客户端,然后在客户端一输入如下命令:

127.0.0.1:6379> blpop key1 key2 5
(nil)
(5.06s)

       上面的命令是在 key1 和 key2 列表中弹出一个值,如果两个列表都为空则阻塞 5 秒,因为现在 key1 和 key2 都为空,因此 blpop 阻塞了 5 秒。

       再次在客户端一输入如下命令:

127.0.0.1:6379> blpop key1 key2 20

      由于 key1 和 key2 同样什么都没有,因此 blpop 命令进入 20 秒的阻塞状态,此时,我们在客户端二输入如下命令:

127.0.0.1:6379> lpush key1 java
(integer) 1

      也就是给 key1 一个值,然后观察客户端一,客户端一输出如下:

1) "key1"
2) "java"
(9.51s)

      也就是客户端一的 blpop 阻塞了 9.51 秒 以后 key1 列表弹出一个值 java。

11、brpop 命令

       brpop 命令与 blpop 命令类似,这里就不再赘述了。

12、brpoplpush 命令

       删除一个列表的最右侧的元素,并加入到另一个列表的最左侧。同样它也会进行阻塞。

       该命令的格式如下:

brpoplpush key1 key2 timeout

    在客户端一输入如下命令:

127.0.0.1:6379> brpoplpush key1 key2 20

      由于 key1 是空,因此阻塞 20 秒。

       在客户端二输入如下命令:

127.0.0.1:6379> lpush key1 java
(integer) 1

 观察看客户端一的输出,输出如下:

"java"
(7.86s)

   可以看到客户端一输出了 java,然后来看 key2 的内容,命令如下:

127.0.0.1:6379> lrange key2 0 -1
1) "java"

   可以看到 key1 的元素进入了 key2 中。

13、lindex 命令

      返回列表指定索引位置的值:

127.0.0.1:6379> lindex key  1
"python"

     key 列表 索引 位置为 1 的值是 python

14、linsert 命令

      在列表指定值的前面或后面插入一个新的值,该命令的格式如下:

linsert key BEFORE|AFTER pivot value
127.0.0.1:6379> linsert key before python c
(integer) 5
127.0.0.1:6379> lrange key 0 -1
1) "oc"
2) "c"
3) "python"
4) "java"
5) "rust"

     上面的命令,在 python 值的前面插入新的值 c。

15、lpushx 命令

      当列表存在时,在列表的左侧加入一个值,如果列表不存在则不加入。

127.0.0.1:6379> lpushx key1 java
(integer) 0
127.0.0.1:6379> lrange key1 0 -1
(empty list or set)
127.0.0.1:6379> lpushx key java
(integer) 6
127.0.0.1:6379> lrange key 0 -1
1) "java"
2) "oc"
3) "c"
4) "python"
5) "java"
6) "rust"

16、rpoplpush 命令

       该命令类似 brpoplpush ,只是该命令不进入阻塞,当 key1 为空时直接返回。

17、rpushx 命令

      与 lpushx 命令相同,该命令只是从右侧加入新的值。

总结

       Redis 的列表类型不但可以当作列表来用,还可以当作 队列、栈 等数据结构来使用。这也是单纯的只支持存储 String 类型的缓存中间件使用越来越少的原因吧,因为这种中间件已经不能满足各种业务场景的需要。


       Redis 常用的几种基本数据类型总结完成后,我会再逐步的梳理 Redis 的各种应用场景,希望大家可以喜欢。

240107de3106c7ad83143fa1061ff7f3.png

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
NoSQL Java Redis
redis的基本命令,并用netty操作redis(不使用springboot或者spring框架)就单纯的用netty搞。
这篇文章介绍了Redis的基本命令,并展示了如何使用Netty框架直接与Redis服务器进行通信,包括设置Netty客户端、编写处理程序以及初始化Channel的完整示例代码。
38 1
redis的基本命令,并用netty操作redis(不使用springboot或者spring框架)就单纯的用netty搞。
|
20天前
|
NoSQL 关系型数据库 MySQL
Redis 列表(List)
10月更文挑战第16天
16 2
|
5天前
|
存储 NoSQL Java
Redis命令:列表模糊删除详解
通过本文的介绍,我们详细探讨了如何在Redis中实现列表的模糊删除。虽然Redis没有直接提供模糊删除命令,但可以通过组合使用 `LRANGE`和 `LREM`命令,并在客户端代码中进行模糊匹配,来实现这一功能。希望本文能帮助你在实际应用中更有效地操作Redis列表。
11 0
|
30天前
|
缓存 NoSQL 测试技术
Redis如何解决频繁的命令往返造成的性能瓶颈!
Redis如何解决频繁的命令往返造成的性能瓶颈!
|
1月前
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
24 3
|
1月前
|
缓存 NoSQL Redis
Redis命令:列表模糊删除详解
Redis命令:列表模糊删除详解
42 3
|
12天前
|
存储 NoSQL Redis
Redis常见面试题:ZSet底层数据结构,SDS、压缩列表ZipList、跳表SkipList
String类型底层数据结构,List类型全面解析,ZSet底层数据结构;简单动态字符串SDS、压缩列表ZipList、哈希表、跳表SkipList、整数数组IntSet
|
1月前
|
NoSQL 关系型数据库 MySQL
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
本文全面阐述了Redis事务的特性、原理、具体命令操作,指出Redis事务具有原子性但不保证一致性、持久性和隔离性,并解释了Redis事务的适用场景和WATCH命令的乐观锁机制。
171 0
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
|
22天前
|
NoSQL Redis 数据安全/隐私保护
Redis 命令
10月更文挑战第15天
23 0
|
2月前
|
消息中间件 存储 NoSQL
4)深度解密 Redis 的列表(List)
4)深度解密 Redis 的列表(List)
31 1
下一篇
无影云桌面