当前位置: 首页 > news >正文

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

🏍️🏍️🏍️引言: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

http://www.xdnf.cn/news/1381915.html

相关文章:

  • 【架构师干货】软件工程
  • Linux学习-TCP并发服务器构建(epoll)
  • Cesium 入门教程(十一):Camera相机功能展示
  • Burp系列【密码暴力破解+令牌token破解】
  • 深度学习篇---VGGNet网络结构
  • DeepInteraction++基于多模态交互的自动驾驶感知与规划框架
  • 【iOS】Masnory自动布局的简单学习
  • Linux(二) | 文件基本属性与链接扩展
  • Spring Security 深度学习(二): 自定义认证机制与用户管理
  • npm install --global @dcloudio/uni-cli 时安装失败
  • 一天认识一个神经网络之--CNN卷积神经网络
  • QT之双缓冲 (QMutex/QWaitCondition)——读写分离
  • LINUX ---网络编程(三)
  • 如何通过docker进行本地部署?
  • 机器学习回顾(二)——KNN算法
  • Day16_【机器学习概述】
  • 设计模式:组合模式(Composite Pattern)
  • 【数据结构与算法】LeetCode 20.有效的括号
  • Vue 组件循环 简单应用及使用要点
  • 微服务保护和分布式事务-01.雪崩问题-原因分析
  • 步进电机、直流电机常见问题
  • APP手游使用游戏盾SDK为何能有效抵御各类攻击?
  • Java全栈工程师的实战面试:从基础到微服务的全面解析
  • 算法 --- 二分
  • Paimon——官网阅读:非主键表
  • CLIP图像特征提取:`CLIPVisionModel` vs `CLIPModel.get_image_features()`,哪种更适合你的任务?
  • [sys-BlueChi] docs | BluechiCtl命令行工具
  • 滑台模组如何实现电子制造精密加工?
  • Java 大视界 -- 基于 Java 的大数据实时流处理在智能电网分布式电源接入与电力系统稳定性维护中的应用(404)
  • 零基础开发应用:cpolar+Appsmith平民化方案