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 的用法也是一摸一样的,这里就不再演示。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大厂面试官赞不绝口的后端技术亮点【后端项目亮点合集(2)】

本文将持续更新~~ hello hello~ &#xff0c;这里是绝命Coding——老白~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#xff1a;绝命C…

第三方商城对接重构(HF202407)

文章目录 项目背景一、模块范围二、问题方案1. 商品模块整体来说这块对接的不是太顺利,梳理了几条大概的思路:2. 订单模块3. 售后4. 发票5. 结算单经验总结项目背景 作为供应商入围第三方商城成功,然后运营了一段时间,第三方通知要重构, 需要重新对接打通接口完成系统对接…

【网络管理工具】NETworkManager工具的基本使用教程

【网络管理工具】NETworkManager工具的基本使用教程 一、NETworkManager工具介绍1.1 NETworkManager简介1.2 NETworkManager特点1.3 NETworkManager使用场景 二、下载NETworkManager软件包2.1 下载地址2.2 下载软件 三、运行NETworkManager工具3.1 解压NETworkManager3.2 运行N…

WPF中Background=“{x:Null}“ 和 Transparent

WPF中关于背景透明和背景无 此时&#xff0c;我代码中是写的有有个控件&#xff0c;一个Border &#xff0c;一个TextBox &#xff0c;范围都是全屏这么大&#xff0c;可以输入TextBox 因为&#xff0c;当border没有设置背景的时候&#xff0c;实际上是&#xff1a; <Borde…

实现原理:远程过程调用(RPC)

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

Linux多进程和多线程(七)进程间通信-信号量

进程间通信之信号量 资源竞争 多个进程竞争同一资源时&#xff0c;会发生资源竞争。 资源竞争会导致进程的执行出现不可预测的结果。 临界资源 不允许同时有多个进程访问的资源, 包括硬件资源 (CPU、内存、存储器以及其他外 围设备) 与软件资源(共享代码段、共享数据结构) …

2024上半年网络工程师考试《应用技术》试题二

试题二(20分) 阅读以下说明,回答问题,将解答填入对应的解答栏内。 某单位网络拓扑如下图所示.SW1、SW2为核心层交换机&#xff0c;PC网关配置在核心层&#xff0c;SW3-SW4为接入层交换机,行政部PC划为vlan10,销售部PC划为vlan20。 【问题1】(4分) 要求实现骨干链路冗余&…

[leetcode hot 150]第一百三十题,被围绕的区域

题目&#xff1a; 给你一个 m x n 的矩阵 board &#xff0c;由若干字符 X 和 O 组成&#xff0c;捕获 所有 被围绕的区域&#xff1a; 连接&#xff1a;一个单元格与水平或垂直方向上相邻的单元格连接。区域&#xff1a;连接所有 0 的单元格来形成一个区域。围绕&#xff1a…

图的应用之最短路径

引入 应用 算法思想 Dijistra算法 用于解决单个顶点间的最短路径问题 将顶点看成两部分&#xff1a; 最短路径顶点集合A与尚未确定最短路径顶点集合B。 先将顶点按最短路径由小到大依次加入到A中&#xff0c;选择由源点到A中最短的顶点&#xff0c;并记录距离与顶点&#xf…

154. 寻找旋转排序数组中的最小值 II(困难)

154. 寻找旋转排序数组中的最小值 II 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转&#xff1a;154. 寻找旋转排序数组中的最小值 II 2.详细题解 该题是153. 寻找旋转排序数组中的最小值的进阶题&#xff0c;在153. 寻找旋转排序数组中的最小值…

讲个SystemVerilog随机约束小坑

正文 记录个在写SystemVerilog随机约束时遇到的一个小坑&#xff0c;如果没有认真去查看随机结果是否符合预期&#xff0c;还真不容易发现。 为了方便讲述&#xff0c;写了如下示例代码。类cl_a里有个随机变量aa&#xff0c;初始值为222。在module top里对类cl_a例化并进行约…

【Web】

1、配仓库 [rootlocalhost yum.repos.d]# vi rpm.repo ##本地仓库标准写法 [baseos] namemiaoshubaseos baseurl/mnt/BaseOS gpgcheck0 [appstream] namemiaoshuappstream baseurlfile:///mnt/AppStream gpgcheck0 2、挂载 [rootlocalhost ~]mount /dev/sr0 /mnt mount: /m…

EFUSE中redundancy program/read的理解

现在有空&#xff0c;整理下前段时间关于efuse中redundancy program/read模式的理解&#xff0c;下面以TEF22ULP128X32HD18_PURM这款芯片为例&#xff0c;进行笔记整理&#xff0c;如有侵权或不妥之处&#xff0c;请时告知并及时处理。 1 redundancy的作用 efuse中存放的是芯…

跨平台书签管理器 - Raindrop

传统的浏览器书签功能虽然方便&#xff0c;但在管理和分类上存在诸多局限。今天&#xff0c;我要向大家推荐一款功能强大的跨平台书签管理-Raindrop https://raindrop.io/ &#x1f4e2; 主要功能&#xff1a; 智能分类和标签管理 强大的搜索功能 跨平台支持 分享与协作 卡片式…

适用于 Windows的 5 个最佳 PDF 转 Word 转换器

PDF 文件是共享文档的首选格式&#xff0c;但是&#xff0c;此类文件存在限制&#xff0c;使其难以修改或编辑。因此&#xff0c;您可能会发现自己正在寻找一种将 PDF 文件转换为 Word 或其他可编辑格式的方法。 有许多不同的 PDF 转换器&#xff0c;每个转换器的功能略有不同…

数据结构初阶 遍历二叉树问题(一)

一. 链式二叉树的实现 1. 结构体代码 typedef int BTDateType; typedef struct BinaryTreeNode {BTDateType data;struct BinaryTreeNode* left;struct BinaryTreeNode* right; }BTNode; 大概的图形是这样子 2. 增删查改 我们这里要明确的一点的 二叉树的增删查改是没有意…

04.ffmpeg打印音视频媒体信息

目录 1、相关头文件 2、相关结构体 3、相关函数 4、函数详解 5、源码附上 1、相关头文件 #include <libavformat/avformat.h> 包含格式相关的函数和数据结构 #include <libavutil/avutil.h> 包含一些通用实用函数 2、相关结构体 AV…

【HICE】转发服务器实验

1.在本地主机上操作 2.在客户端操作设置主机的IP地址为dns 3.测试,客户机是否能ping通

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

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

ASP.NET Core----基础学习02----中间件的执行顺序 静态文件中间件

文章目录 1.终端中间件&#xff08;Middleware&#xff09;2.中间件的执行顺序&#xff08;1&#xff09;当只有2个中间件的时候&#xff0c;先执行普通中间件&#xff0c;再执行终端中间件&#xff08;2&#xff09;当有多个中间件的时候&#xff0c;中间件的执行顺序 3.添加静…