Redis | Redis 列表相关命令

19 篇文章 0 订阅
15 篇文章 0 订阅

 之前整理的关于 Redis 的文章:

Redis | Redis 的安装

Redis | Redis 的帮助命令

Redis | Redis 命令分类

Redis | Redis 通用命令

Redis | Redis 字符串相关命令

Redis | Redis 列表相关命令

Redis | Redis 集合相关命令

Redis | Redis 有序集合相关命令

Redis | Redis 哈希相关命令

Redis | 源码阅读 —— 字符串

Redis | 源码阅读 —— 链表

Redis | Redis Pub/Sub相关命令

Redis | 管道 —— PipeLine

Redis | SpringBoot整合Redis

Redis | Redis 的事务一

Redis | Redis 的事务二

Redis | 基础数据类型应用场景

Redis | 事务源码阅读

Redis | 事物源码阅读 —— watch

Redis | 慢查询

Redis | 给接口添加缓存

Redis | Redis 也会算距离

目录

常用 List 相关命令

1、lpush 命令

2、rpush 命令

3、llen 命令

4、lrange 命令

5、ltrim 命令

6、lset 命令

7、lrem 命令

8、lpop 命令

9、rpop 命令

10、blpop 命令

11、brpop 命令

12、brpoplpush 命令 

13、lindex 命令

14、linsert 命令

15、lpushx 命令

16、rpoplpush 命令

17、rpushx 命令

总结


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

图片

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

127.0.0.1:6379> help @list

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

图片

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

常用 List 相关命令

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

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


1、lpush 命令

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

127.0.0.1:6379> lpush key java
(integer) 1

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

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

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

127.0.0.1:6379> lpush key c++
(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 的各种应用场景,希望大家可以喜欢。

图片

 

图片

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农UP2U

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值