JAVA全栈Redis篇————List常用命令讲解

发布于:2025-08-30 ⋅ 阅读:(18) ⋅ 点赞:(0)

🏍️🏍️🏍️引言:List命令的工作原理阐述

前面讲述数据类型概述的时候我们已经说过List的本质是一个双向链表,类似于C++模板库中的Deque,可以从头插入和删除也可以从尾插入和删除

我们来看下图,假设原来的队列是A,B,我们现在要往队头(A的左边)插入C和D,就用LPUSH命令,如果往队尾(B的右边)插入E就用RPUSH命令
在这里插入图片描述
那么如果我们要取队头的元素使用LPOP就可以取到队头的D(最左边),要取队尾的元素使用RPOP就可以取到队尾的E(最右边),
在这里插入图片描述

🏍️🏍️🏍️深化:从栈的角度深入理解List原理

我们学过数据结构的都知道栈具有后进先出的特点,在使用LPUSH命令存储数据时,我们可以把List看作一个右端封闭的栈,数据存储的顺序和栈的顺序一致,同理,使用RPUSH命令可以把List看作一个左端封闭的栈。

🏍️🏍️🏍️实战:可视化阐述List原理

🍕🍕🍕命令组1:LPUSH,RPUSH,LPOP,LPOP讲解

首先我们使用LPUSH往users中插入1,2,3三个元素,再使用RPUSH继续往users中插入4,5,6三个元素‘

在这里插入图片描述

然后我们在图形化界面中观察插入的顺序

在这里插入图片描述

如上图所示,先使用的是LPUSH,我们把List看成右端封闭的栈,那么先插入1,1就会在最右边,最后插入3,3就在最左边,所以元素3的id是1,后使用RPUSH我们再把List看成左端封闭,那么1在最右边,所以4,5,6就会依次插入到1后面,并且对应id4,5,6,id编号是从左向右进行的。

然后我们分别使用LPOP和RPOP分别取出队头和队尾元素,分别是3和6,然后取出3再使用LPOP就会把2取出来

在这里插入图片描述

🍕🍕🍕命令2:LRANGE

功能:取出指定角标范围内的元素
格式:LRANGE key start stop

下面的命令我们取出了users中角标1到角标3之间的元素

在这里插入图片描述

注意,我们下面的ID对应的角标其实是0,1,2所以取1到3的角标只会取出来4,5而不会取出来1

在这里插入图片描述

🍕🍕🍕命令3:LLEN

功能:获取列表长度
格式:LLEN key
在这里插入图片描述

🍏🍏🍏撑一支长蒿,向青草更青处漫溯:Redis6.2新增命令及阻塞命令的探究

🍬🍬🍬LMPOP命令
Redis6.2新推出命令,功能是可以批量从列表左侧弹出指定数量的元素,用法是LMPOP key 数量,当然在Linux版本的Redis或者高版本windows版的Redist中,LPOP和RPOP就可以直接指定数量,这就是为什么说Linux版本发行的Redis功能更全面,这里本小编用的是3.2版的Redis,版本已经老旧了

🍬🍬🍬LPOP,RPOP和LRANGE的区别
同样是获取元素的命令,带POP的命令会清楚数据库的缓存,获取完元素刷新数据库可以发现数据已经不存在了,而LRANGE则不会清楚数据库的缓存

🍬🍬🍬关于阻塞队列命令BLPOP和BRPOP
功能:同LPOP和RPOP类似,只不过在没有元素时指定等待时间,不直接返回空
格式:BLPOP/BRPOP key 等待时间

我们首先执行一次BLPOP发现报错,因为此时users2中并没有数据,然后我们再次执行并指定一个200s的等待时间

在这里插入图片描述
然后我们重新建立一个连接,往users2中插入数据

在这里插入图片描述

然后我们再返回到原来的连接发现已经接收到我们插入的数据,这就是阻塞队列的用法

在这里插入图片描述
Linux系统还可以显示出等待时间

🍏🍏🍏写在最后:关于三个拓展问题的研究

🍬🍬🍬如何用List模拟一个栈?
入口和出口设置在同一边(都用L或都用R)

🍬🍬🍬如何用List模拟一个队列?
入口和出口设置在不同边

🍬🍬🍬如何用List模拟一个阻塞队列?
入口和出口设置在不同边
出队时采用BLPOP或BRPOP


网站公告

今日签到

点亮在社区的每一天
去签到