Redis中list类型操作命令(操作演示、命令语法、返回值、时间复杂度、注意事项等)

文章目录

  • lpush 命令
  • lrange 命令
  • lpushx 命令
  • rpush 命令
  • rpushx 命令
  • lpop 命令
  • rpop 命令
  • lindex 命令
  • linsert 命令
  • llen 命令
  • lrem 命令
  • ltrim 命令
  • lset 命令
  • blpop 和 brpop

lpush 命令

从左侧向列表中插入指定的元素

语法:lpush key value [value……]

时间复杂度:O(1)

返回值:成功插入元素的个数

注意:在插入时,如果该元素已经存在,则返回的个数也会将原列表中元素的个数加上新插入元素的个数,就算重复也会计算上。

操作演示:

在这里插入图片描述

lrange 命令

通过指定下标,获取指定范围内的元素

语法:lrange key start end

时间复杂度:O(k),k表示获取的元素的个数

返回值:指定范围内的元素

操作演示:

在这里插入图片描述

注意:因为它是从左边依次插入指定元素,所以,第一个元素就是8,获取的时候,也是从左边依次获取。

如果指定的下标越界了挥发会发生什么呢?

下面演示以下获取下标0-100的元素

在这里插入图片描述

注意:如果指定的下标越界,没有那么多的元素,那么,在获取的时候,列表中有多少个元素就返回多少个元素

lpushx 命令

在插入时,如果指定的key存在,则从左侧将一个或多个元素放到列表中,如果不存在,则插入失败

语法:lpushx key value [value….]

返回值:插入后,列表中元素的个数或者0,如果是0,表示插入失败

时间复杂度:O(1)

操作演示:

在这里插入图片描述

rpush 命令

从“右侧”向 list 中插入一个或多个元素,用法和 lpush 一样,只不过插入的方向不同

语法:rpush key value [value…….]

返回值:插入过后,list中元素的个数

时间复杂度:O(1)

操作演示:

在这里插入图片描述

rpushx 命令

如果指定的 key 存在,从“右侧”向 list 中插入一个或多个元素,如果不存在,则插入失败,和 lpushx 命令用法一样。

语法:rpushx key value [value……]

返回值:插入成功后,list 中元素的个数,如果插入失败,返回 0

时间复杂度:O(1)

操作演示:

在这里插入图片描述

lpop 命令

从 list 的左边删除一个元素

语法:lpop key [count],“count”表示指定删除元素的个数

返回值:删除的元素 或者 nil

时间复杂度:O(1)

操作演示:

在这里插入图片描述

rpop 命令

从 list 的右边删除一个元素

语法:rpop key [count],“count”表示指定删除元素的个数

返回值:删除的元素 或者 nil

时间复杂度:O(1)

操作演示:

在这里插入图片描述

所以,lpush、lpop、rpush、rpop 这四个命令搭配使用就可以构成 “栈” 或 “队列” 这两种数据结构

搭配使用 lpush和 lpop,就相当于栈

搭配使用 rpush 和 lpop,就相当于队列

lindex 命令

获取指定下标的值

**语法:**lindex key index

**返回值:**下标对应的值 或者 nil

**时间复杂度:**O(n)

操作演示:

在这里插入图片描述

注意:如果指定的下标越界,则返回 nil

linsert 命令

通过指定基准位置,在基准位置的前面或者后面插入元素

语法:linsert key berfore | after pivot value

before 表示在基准的前面插入

after 表示在基准的后面插入

pivot 表示基准,基准是列表中的某个值

返回值:插入成功后,元素的数量,或者是 -1

时间复杂度:O(n)

操作演示:

在这里插入图片描述

如果列表中存在多个相同的基准,在插入的时候会发生什么?

  1. 在列表中存在两个 2

在这里插入图片描述

  1. 指定 2 为基准,在基准的后面插入 6

在这里插入图片描述

可以看到,在寻找基准值时,是从列表的左边开始寻找,找第一个符合指定基准的位置。

如果指定基准位置在列表中不存在,则返回 -1

在这里插入图片描述

llen 命令

列表的长度

语法:llen key

返回值:列表长度 或者 0,如果key不存在,则返回0

时间复杂度:O(1)

操作演示:

在这里插入图片描述

lrem 命令

删除指定个数的元素

语法:lrem key count num

count 表示个数,要删除几个指定的元素,count有下列三种情况:

  • count > 0 从列表的左边开始删除,并删除count个

  • count < 0 从列表的右边开始删除,并删除count个

  • count = 0 删除列表中所有指定的元素

    num 表示指定的元素

返回值:成功删除元素的个数

时间复杂度:O(n)

操作演示:

  1. 插入四组 1 2 3 4

在这里插入图片描述

  1. 删除元素 1
  • count = 2

从左边删除,删除两个 1

在这里插入图片描述

  • count = -2

从右边删除,删除两个 1

在这里插入图片描述

  • count = 0

删除所有的元素 2

在这里插入图片描述

注意:如果指定的 count 个数大于列表中存在的元素个数,删除时,列表中有多少个元素就删多少个元素,如下图:

列表中有 4 个 3,但是,coung = 5,也可以成功删除

在这里插入图片描述

ltrim 命令

删除指定区间外的元素

语法:ltrim key start end

返回值:ok

时间复杂度:O(N),N表示要删除元素的个数

操作演示:

  1. 插入 1 2 3 4 5 6
  2. 删除指定区间[1,4] 之外的元素,也就是删除 1, 6
    在这里插入图片描述

lset 命令

根据下标修改元素

语法:lset key index element

返回值:ok

时间复杂度:O(n)

操作演示:

在这里插入图片描述

注意:如果指定的下标不存在,则报出错误

blpop 和 brpop

  1. 如果 list 中存在元素,blpop、brpop 和 lpop、rpop 的作用一样。

  2. 如果 list 中没有元素,blpop、brpop 取元素时就会阻塞等待(类似于阻塞队列),同时也设置阻塞等待的时间,如果在超过等待时间之前,list 中有了元素,就直接弹出,如果等到超过这个最大等待时间,就不在进行等待,而且在等待的过程中,Redis 可以去执行其他的命令。

  3. 如果在 blpop、brpop 中指定多个key,那么会从左向右遍历键,一旦有一个键对应的列表中有元素,命令就立即返回。

  4. 如果多个客户端对同一个键执行 pop,则最先执行命令的客户端会得到弹出的元素

语法:blpop key [key……] timeout

注意:这里的timeout表示超时时间,单位是:秒(Redis 6之后,超时时间允许设定为小数)

返回值:元素值

时间复杂度:O(1)

操作演示:

(1) 针对一个非空列表操作

此时 key1 的列表里面有3个元素,使用 blpop 弹出元素时,当前 键 以及 键对应的值都会打印出来

在这里插入图片描述

(2)针对一个空列表操作

此时 key1 键为空,从 key1键 对应的列表中取元素并且设置等待时间为100秒

在这里插入图片描述

再开启一个客户端向 key1 里放入元素

在这里插入图片描述

此时,正在阻塞的这个客户端就可以立即拿到元素,并且打印出来等待了多长时间(29.36s)

在这里插入图片描述

(3) 指定多个不存在的 key,当其他的客户端向任何一个 key 中放入元素,另一个阻塞的客户端都会直接获取到

在这里插入图片描述

以上就是 blpop 的用法,brpop 的用法也是一摸一样的,这里就不再演示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/41831.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】自定义类型:联合和枚举

前言 前面我们学习了一种自定义类型&#xff0c;结构体&#xff0c;现在我们学习另外两种自定义类型&#xff0c;联合 和 枚举。 目录 一、联合体 1. 联合体类型的声明 2. 联合体的特点 3. 相同成员联合体和结构体对比 4. 联合体大小的计算 5. 用联合体判断当前机…

C语言实现顺序表字符型数据排序

实现直接插入、冒泡、直接选择排序算法。 #include <stdio.h> #include <stdlib.h>typedef char InfoType;#define n 10 //假设的文件长度&#xff0c;即待排序的记录数目 typedef char KeyType; //假设的关键字类型 typedef struct { //记录类型KeyType…

vue3+vite搭建第一个cesium项目详细步骤及环境配置(附源码)

文章目录 1.创建vuevite项目2.安装 Cesium2.1 安装cesium2.2 安装vite-plugin-cesium插件&#xff08;非必选&#xff09;2.3 新建组件页面map.vue2.4 加载地图 3.完成效果图 1.创建vuevite项目 打开cmd窗口执行以下命令&#xff1a;cesium-vue-app是你的项目名称 npm create…

【LeetCode:3101. 交替子数组计数 + 滑动窗口 + 数学公式】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

转盘输入法-键盘加鼠标版本

序 转盘输入法&#xff0c;给你的聊天加点新意。它不用常见的九宫格或全键盘&#xff0c;而是把字母摆在圆盘上&#xff0c;一滑一滑&#xff0c;字就出来了&#xff0c;新鲜又直接。 键盘加鼠标版本GIF演示 演示软件下载 转盘输入法PC演示版本EXE下载https://download.csdn…

Unity编辑器扩展之Inspector面板扩展

内容将会持续更新&#xff0c;有错误的地方欢迎指正&#xff0c;谢谢! Unity编辑器扩展之Inspector面板扩展 TechX 坚持将创新的科技带给世界&#xff01; 拥有更好的学习体验 —— 不断努力&#xff0c;不断进步&#xff0c;不断探索 TechX —— 心探索、心进取&#xff…

阿里云服务器配置、搭建(针对Spring boot和MySQL项目)

这是一篇极其详细且痛苦的文章&#xff0c;还是在两位后端的大佬手把手教导下、以及我找遍全网所有资料、问了N遍AI、甚至直接申请阿里云工单一对一询问客服一整天、连续清空再上传反复30多次整个项目jar包......总结出来的终极要人命踩坑的问题总结 一、首先购买服务器 其实不…

磁盘分区工具 -- 傲梅分区助手 v10.4.1 技术员版

软件简介 傲梅分区助手是一款功能强大的磁盘分区工具&#xff0c;它专为Windows系统设计&#xff0c;帮助用户更高效地管理他们的硬盘。该软件支持多种分区操作&#xff0c;包括创建、格式化、调整大小、移动、合并和分割分区。此外&#xff0c;它还提供了复制硬盘和分区的功能…

06-6.4.4 拓扑排序

&#x1f44b; Hi, I’m Beast Cheng &#x1f440; I’m interested in photography, hiking, landscape… &#x1f331; I’m currently learning python, javascript, kotlin… &#x1f4eb; How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以…

java基础:方法

一、方法 1、Java方法是语句的集合&#xff0c;它们在一起执行一个功能。 方法是解决一类问题的步骤的有序集合方法包含于类或对象中方法在程序中被创建&#xff0c;在其他地方被引用 2、设计方法的原则&#xff1a;方法的本意是功能块&#xff0c;就是实现某个功能的语句块…

如何选择一家适合自己的商城源码?

商城源码的选择取决于多个因素&#xff0c;包括商城的功能需求、稳定性、易用性、可定制性以及价格等。启山智软作为在市场上被广泛认可且表现优异的商城源码提供商&#xff0c;具有以下的特点和优势&#xff1a; 特点①&#xff1a;国内知名的B2B2C开源商城源码系统&#xff…

BufferReader/BufferWriter使用时出现的问题

项目场景&#xff1a; 在一个文件中有一些数据&#xff0c;需要读取出来并替换成其他字符再写回文件中&#xff0c;需要用Buffer流。 问题描述 文件中的数据丢失&#xff0c;并且在读取前就为空&#xff0c;读取不到数据。 问题代码&#xff1a; File f new File("D:\\…

Python排序,你用对了吗?一文教你sorted和sort的正确姿势!

目录 1、sorted基础用法 🍏 1.1 列表排序入门 1.2 自定义排序规则 1.3 排序稳定性和key函数 2、sort内置方法操作 🔍 2.1 直接修改原列表 2.2 sort高级技巧与性能考量 2.3 案例:数据预处理实战 2.4 高级用法:reverse与cmp_to_key 3、应对复杂数据结构 🌐 3.1…

Yolo系列再次更新——清华发布Yolov10端到端实时对象检测模型

前期我们刚介绍过Yolo系列模型,还以为Yolov9刚刚发布,也许今年不会再有什么更新。但是没有想到打脸如此之快,Yolov10端到端实时对象检测模型强势回归发布。Yolov10端到端实时对象检测 YOLOv10 是清华大学研究人员在YOLO软件包的基础上,引入了一种新的实时目标检测方法,解决…

HTTP协议格式

目录 正文&#xff1a; 1.概述 2.主要特点 3.请求协议格式 4.响应协议格式 5.响应状态码 总结&#xff1a; 正文&#xff1a; 1.概述 HTTP 协议是用于传输超文本数据&#xff08;如 HTML&#xff09;的应用层协议&#xff0c;它建立在传输层协议 TCP/IP 之上。当我们在…

视频参考帧和重构帧复用

1、 视频编码中的参考帧和重构帧 从下图的编码框架可以看出&#xff0c;每编码一帧需要先使用当前帧CU(n)减去当前帧的参考帧CU&#xff08;n&#xff09;得到残差。同时&#xff0c;需要将当前帧的重构帧CU*&#xff08;n&#xff09;输出&#xff0c;然后再读取重构帧进行预测…

七、MyBatis-Plus高级用法:最优化持久层开发-个人版

七、MyBatis-Plus高级用法&#xff1a;最优化持久层开发 目录 文章目录 七、MyBatis-Plus高级用法&#xff1a;最优化持久层开发目录 一、MyBatis-Plus快速入门1.1 简介1.2 快速入门回顾复习 二、MyBatis-Plus核心功能2.1 基于Mapper接口CRUDInsert方法Delete方法Update方法Se…

PyQt5中如何实现指示灯点亮和指示灯熄灭功能

一般上位机界面都会涉及指示灯点亮和指示灯熄灭功能&#xff0c;从网上下载该功能的上位机界面&#xff0c;学习如何使用PyQt5搭建具备指示灯点亮和指示灯熄灭效果的界面。 1. 上位机界面的效果展示 使用PyQt5实现以下界面&#xff0c;界面效果如下&#xff0c;界面图片是从网…

基于SpringBoot的招聘信息管理系统的详细设计和实现(源码+lw+部署文档+讲解等,欢迎咨询我!!)

文章目录 目录 文章目录 详细视频展示&#xff1a; 系统具体实现效果&#xff08;看看我的实力&#xff09; 技术栈&#xff08;详细的描述提供给同学思路参考&#xff09; 2.1 Java语言介绍 2.2 B/S架构 2.3 MySQL 数据库介绍 2.4 MySQL环境配置 2.5 SpringBoot框…

C++之static关键字

文章目录 前提正文多重定义extern关键字使用staticstatic 全局变量(在.cpp文件中定义)static变量存放在哪里static变量可不可以放在.h文件中 static 函数static局部变量static 成员变量static 成员函数 总结参考链接 前提 好吧&#xff0c;八股&#xff0c;我又回来了。这次想…