详谈redis命令之列表(List)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41969845/article/details/108637013

一、前言

在第一篇blog《详谈redis数据结构》中就已讲解过redis的列表结构,常用的一些操作命令也讲解过,也详细解说过列
表的有序和有序集合的有序是不一样的有序,如果还不太清楚的同学可以回头去读。本文将着重详细讲解redis中关于列表的操作命令,使用Java语言来写示例,如果读者对Java语言不熟悉,可以关注文章末尾的微信公众号查看Java系列文章。

二、列表的操作命令

2.1 LRANGE

LRANGE全称:list range
返回[start,end]区间之内的所有元素
(具体示例见下文)

2.2 RPUSH与LPUSH

RPUSH全称 right push
将一个或多个元素推入列表右端
LPUSH全称 left push
将一个或多个元素推入列表左端

//右推
System.out.println(conn.rpush("name1","Kelvin","Oscar","Mike","Eden"));
//返回当前里列表长度
System.out.println(conn.lrange("name1",0,-1));
//左推
System.out.println(conn.lpush("name2","Kelvin","Oscar","Mike","Eden"));
System.out.println(conn.lrange("name2",0,-1));

其中4是当前的列表长度
在这里插入图片描述

2.3 RPOP与LPOP

RPOP全称right pop 移除并返回列表最右端元素
LPOP全称left pop 移除并返回列表最左端元素

System.out.println(conn.rpush("name3","Kelvin","Oscar","Mike","Lucy","SeeDou"));
System.out.println(conn.lrange("name3",0,-1));
//右弹
System.out.println(conn.rpop("name3"));
System.out.println(conn.lrange("name3",0,-1));
//左弹
System.out.println(conn.lpop("name3"));
System.out.println(conn.lrange("name3",0,-1));

在这里插入图片描述

2.4 LINDEX

LINDEX全称list index
返回列表中指定索引处的位置

System.out.println(conn.lrange("name3",0,-1));
System.out.println(conn.lindex("name3",0));
System.out.println(conn.lindex("name3",1));
System.out.println(conn.lindex("name3",2));
System.out.println(conn.lindex("name3",3));
//列表只有三个元素,所以索引值为3则无元素,返回null

在这里插入图片描述

2.5 LTRIM

LTRIM全称:List Trim 列表修建
只保留列表[start,end]之间的元素

System.out.println(conn.rpush("name","Kelvin","Oscar","Mike","Eden","David","Trump","Obama"));
System.out.println(conn.lrange("name",0,-1));
System.out.println(conn.ltrim("name",2,6));
//修建成功返回“OK”
System.out.println(conn.lrange("name",0,-1));

在这里插入图片描述

2.6 BLPOP与BRPOP

BLPOP全称:blocking left pop
从第一个非空列表中弹出位于最左端的元素,或者在阻塞timeout秒之内等待可弹出的元素出现。
如下代码,先构建两个列表
age列表中只存一个值
name列表中存入多个值

System.out.println(conn.rpush("age","12"));
System.out.println(conn.rpush("name","Kelvin","Eden","Oscar","Mike"));
System.out.println(conn.lrange("age",0,-1));
System.out.println(conn.lrange("name",0,-1));
System.out.println(conn.blpop(1,"age","name"));

运行第一次,弹出age列表里的12
在这里插入图片描述
然后将rpush元素的两行代码注释掉,以防重复push
再运行一次,这时age列表已经是空列表了,那么应该弹出name里面的元素
在这里插入图片描述
BRPOP全称block right pop
从第一个非空列表中弹出位于最右端的值,或者在阻塞timeout秒之内等待可弹出的元素出现。
同样,构造两个列表age和name(注意刚刚的列表元素已经被全部抹去了)
age中存两个元素,以便辨别左右,name中存入多个元素

System.out.println(conn.rpush("age","12","13"));
System.out.println(conn.rpush("name","Kelvin","Eden","Oscar","Mike"));
System.out.println(conn.lrange("age",0,-1));
System.out.println(conn.lrange("name",0,-1));
System.out.println(conn.brpop(1,"age","name"));

在这里插入图片描述
将rpush那两行注释掉,再运行一次
在这里插入图片描述
再运行一次
在这里插入图片描述
由此可见,所说的第一个非空列表是从传入参数中从左到右数的,而弹出元素方向在列表中是根据是blpop还是brpop来看的。至于阻塞时间是在实际开发中列表元素的有无是动态的,有可能运行这行代码的那一刻还没有元素但是在一定时间内他会有元素,所以可以设置一个阻塞时间来弹出这个可能出现的元素。这不得不说,redis的功能相当强大。

2.7 RPOPLPUSH

rpoplpush全称right pop list push
RPOPLPUSH source-key dest-key 从source-key列表中弹出位于最右端的元素,然后将这个元素推入dest-key列表的最左端,并向用户返回这个元素
构建两个列表rich和poor,各push若干元素

System.out.println(conn.rpush("rich","Joy","Jone","Jun"));     System.out.println(conn.rpush("poor","Kelvin","Eden","Oscar","Mike"));
System.out.println(conn.lrange("rich",0,-1));
System.out.println(conn.lrange("poor",0,-1));
System.out.println(conn.rpoplpush("rich","poor"));
System.out.println(conn.lrange("rich",0,-1));
System.out.println(conn.lrange("poor",0,-1));

在这里插入图片描述

2.8 BRPOPLPUSH

BRPOPLPUSH比RPOPLPUSH多了一个可阻塞功能,就不单独再写测试用例了。读者可自行测试。

总结

redis的列表命令还是蛮多的,熟练掌握命令的操作对日后的开发肯定大有帮助。列表的一个主要优点就是在于它可以包含多个1字符串值,这使得用户可以将数据集中在同一个地方。

对Java系列知识感兴趣的朋友可以加入QQ群
慧梦软件开发技术联盟:952317701
更多系列文章在java高级程序开发微信公众号
Java高级开发技术

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值