【Redis】List类型的常用命令大全

news2024/10/9 3:11:15

这里的list列表相当于一个双端队列,也可以认为是双向链表,也可以认为是数组,后续的很多命令都使用到下标。

list的特点:

  • list中的每个元素也都是String类型
  • 里面的元素可以重复
  • 列表中的元素是有序的,如果里面元素顺序进行调换就不是原来的List
1.常用命令大全

以下命令,l和r组成的相对命令,分别表示left和right的意思。如果是l单独存在,则说明是list的意思。区间范围都是闭区间,并且坚持负数下标。

操作类型命令时间复杂度
左边添加lpush key value [value … ]
O(k),k 是元素个数
右边添加rpush key value [value … ]
O(k),k 是元素个数
指定位置添加linsert key before | after pivot value
O(n),n是pivot距离头尾的距离
范围查找lrange key start end
O(s+n),s是start偏移量,
n是start到end的范围
下标查找lindex key indexO(n),n 是索引的偏移量
求长度llen keyO(1)
左边删除lpop keyO(1)
右边删除rpop key
O(1)
指定删除lrem key count value
O(k),k 是元素个数
范围删除ltrim key start end
O(k),k 是元素个数
指定修改lset key index valueO(n),n 是索引的偏移量
阻塞操作blpop keyO(1)
阻塞操作brpop key
O(1)
2.命令使用解析

(1)lpush与rpush

这里的l与r分别表示left和right的意思,分别代表头插和尾插的意思

  • lpush

1)语法:lpush key element [element … ]

2)含义:将一个或者多个元素从左侧放入(头插)到list中(key不存在时,创建新的key;存在时,逐个头插)

3)时间复杂度:只插入⼀个元素为 O(1), 插入多个元素为 O(N), N 为插入元素个数

 

按顺序进行头插 

  • lpushx

1)语法:lpushnx key element [element … ]

2)含义:lpush的进化版,若key不存在时直接返回,key存在时才进行头插操作

3)时间复杂度:只插入⼀个元素为 O(1), 插入多个元素为 O(N), N 为插入元素个数

  • rpush

1)语法:rpush key element [element … ]

2)含义:将一个或者多个元素从右侧放入(尾插)到list中,

3)时间复杂度:只插入一个元素为O(1),插入多个元素为O(N),N为插入元素个数

逐个进行尾插 

  • rpushx

1)语法:lpushnx key element [element … ]

2)含义:rpush的进化版,若key不存在时直接返回,key存在时才进行头插操作

3)时间复杂度:只插入⼀个元素为 O(1), 插入多个元素为 O(N), N 为插入元素个数

(2)lrange

1)语法:lrange key start stop

2)含义:获取区间范围[start,stop]内的所有元素,支持负数下标

3)时间复杂度:O(N)

范围[0,-1]表示整个list 

如果范围超过list范围,会尽量返回。比如list长度为10,当求0-100时,就会返回0-10范围的元素。

(3)lpop与rpop

  • lpop

1)语法:lpop key

2)含义:从list左侧取出元素(头删),并且拿到值,类似队列的弹出元素;list为空返回nil

3)时间复杂度:O(1)

把list最左侧元素删除并且获得该值 

  • rpop

1)语法:rpop key

2)含义:从list右侧取出元素(尾删),并且拿到值,类似队列的弹出元素;list为空返回nil

3)时间复杂度:O(1)

(4)lindex

1)语法:lindex key index

2)含义:从左侧开始数起,获取第index位置的元素

3)时间复杂度:O(N),N是起始位置的偏移量

4)返回值:插入后list的长度

下标从0位置开始,下标不符合则返回nil 

(5)linsert

1)语法:linsert key <before | after> pivot element

2)含义:在特定位置插入元素(before和after必须二选一)。pivot是基准元素,不是下标

3)时间复杂度:O(N)

4)返回值:插入后list的长度

(6)llen

1)语法:llen key

2)含义:获取key对应list的长度

3)时间复杂度:O(1)

(7)lrem

rem属于remove的缩写

1)语法:lrem key count value

2)含义:删除count个value元素,直到删除完为止

3)时间复杂度:O(k),K为删除元素个数

count三个取值代表不同的意思

  • >0,从左到右删除count个值为value的元素
  • <0,从右到左删除count个值为value的元素
  • =0,删除所有值为value的元素

(8)ltrim

1)语法:ltrim key start end

2)含义:保留范围[start,end]的元素,删除范围外的所有元素

3)时间复杂度:O(k),k是元素个数

(9)lset

1)语法:lset key index element

2)含义:根据下标修改元素。index为下标,element为修改后的元素

3)时间复杂度:O(n),n是索引的偏移量

(10)blpop与brpop

  1. 这两个是带有阻塞操作的命令
  2. 可以同时等待多个key列表的元素,哪一个列表先有元素则先进行获取
  3. 也可以对同一个list进行多个pop操作 

主要介绍blpop,剩下的一样 

  • blpop

1)语法:blpop key [key2 … ] timeout

2)含义:带有阻塞效果的头删操作。当list为null时阻塞等待,也可以指定等待时间

3)时间复杂度:O(1)

4)返回值:返回二元组,一个表示来自哪一个key,一个表示删掉的值

操作非空列表:和lpop一样

操作空的列表:这个时候会阻塞等待超时时间,直接列表有元素或者时间过期

 

同时等待多个key:

  • brpop

1)语法:brpop key

2)含义:带有阻塞效果的尾删操作。当list为null时阻塞等待,也可以指定等待时间

3)时间复杂度:O(1)

3.编码方式与应用场景

(1)list内部编码方式

现在list主要采取quicklist的编码方式,也就是结合了ziplist和linkedlist两种。

整体是一个linkedlist,链表的每个节点采用ziplist的方式

(2)应用场景

list中带有两个阻塞命令blpop与brpop,因此主要用来作为分频道阻塞消息队列模型

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

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

相关文章

epoll究竟是同步的还是异步的?

简单说一句话&#xff0c;你需要分层看这个事&#xff1a; epoll 这个系统调用&#xff0c;是同步的&#xff0c;也就是必须等待操作系统返回值。 而底层用了 epoll 的封装后的框架&#xff0c;可以是异步的&#xff0c;只要你暴露给外部的接口&#xff0c;无需等待你的返回值…

DDD简介

概述 传统的数据驱动开发模式&#xff0c;View、Service、Dao这种三层分层模式&#xff0c;会很自然的写出过程式代码&#xff0c;这种开发方式中的对象只是数据载体&#xff0c;而没有行为&#xff0c;是一种贫血对象模型。以数据为中心&#xff0c;以数据库ER图为设计驱动&a…

什么是变阻器?

变阻器是一种电子元件&#xff0c;主要用于调整电路中的电阻值&#xff0c;从而实现对电流、电压等电学参数的控制。它在电路中起到非常重要的作用&#xff0c;广泛应用于各种电子设备和实验装置中。 变阻器的主要作用是改变电路中的电阻值。在电路中&#xff0c;电阻值的大小…

二部图简单理解

目录 二部图简单理解 一、定义 二、性质与定理 三、原理举例 四、应用 二部图简单理解 二部图(Bipartite Graph),又称二分图,是图论中的一种特殊模型。以下是对二部图的详细介绍及原理举例: 一、定义 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(…

目标检测or实例分割中AP、MAP的计算

参考链接&#xff1a; 目标检测中AP、MAP的计算_51CTO博客_目标检测map计算 举个例子&#xff1a;

【JVM】内存分析工具JConsole/Visual VM

1 缘起 日常补充JVM调优&#xff0c;调优实践前需要学习一些理论做支撑&#xff0c; JVM调优三步&#xff1a;理论>GC分析>JVM调优&#xff0c; 我们会有一些玩笑话说&#xff0c;做了这么久Java开发&#xff0c;做过JVM调优吗&#xff1f; 做过&#xff0c;面试时。当然…

【深度学习】yolov8n模型的剪枝操作记录

原始 剪枝微调后 可以看到模型大小了&#xff0c; 测试结果显示再cpu 上加速5%-10% from ultralytics import YOLOimport time # Load a pretrained YOLO11n model count_num 500 def test1():model YOLO("/home/justin/Desktop/code/v8_prun/runs/detect/train3/weig…

LC刷题专题:记忆化搜索

文章目录 576. 出界的路径数 本刷题专栏记录自己的记忆化搜索的做题。 576. 出界的路径数 题目链接及描述&#xff1a; https://leetcode.cn/problems/out-of-boundary-paths/description/ 第一次看到这个题目可能先入为主了&#xff0c;首先想到的是使用动态规划做&#xff…

19.安卓逆向-frida基础-hook分析调试技巧1-hookMD5

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;图灵Python学院 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要盲目相信。 工…

C#多线程基本使用和探讨

线程是并发编程的基础概念之一。在现代应用程序中&#xff0c;我们通常需要执行多个任务并行处理&#xff0c;以提高性能。C# 提供了多种并发编程工具&#xff0c;如Thread、Task、异步编程和Parallel等。 Thread 类 Thread 类是最基本的线程实现方法。使用Thread类&#xff0…

【题解】【模拟】—— [NOIP2013 普及组] 表达式求值

【题解】【模拟】—— [NOIP2013 普及组] 表达式求值 [NOIP2013 普及组] 表达式求值题目背景题目描述输入格式输出格式输入输出样例输入 #1输出 #1输入 #2输出 #2输入 #3输出 #3 提示 1.简单做法1.1.题意解析1.2.AC代码 2.使用栈的做法2.1.题意解析2.2.AC代码 [NOIP2013 普及组…

C高级--shell脚本实现分支判断

题目&#xff1a; 分支结构结合test指令完成一下编程 1>判断闰年 2>输入一个数判断是否为偶数 3>使用test指令实现等级判断 90--100A 60--89B 0-50C 其他错误 代码如下&#xff1a; #!/bin/bash read -p "请输入一个年份&#xff1a;" year if [ $((y…

Cisco Meraki平台登陆

登陆以下网址 https://n4.meraki.cn/ 输入之前注册的邮箱&#xff0c;点击Next 输入之前注册时输入的密码&#xff0c;注意不是企业邮箱的密码&#xff01; 查看邮箱&#xff0c;将验证码输入&#xff0c;点击Verify&#xff08;验证&#xff09;&#xff0c;此验证码10分…

C语言-文件IO

文件IO I :input 输入&#xff0c;从文件中读取数据到内存 O:output 输出&#xff0c;把数据写入到文件 Linux系统IO 和 c语言标准IO 1、linux系统IO 1.1 简介 linux操作系统把对文件的操作封装成了多个函数&#xff0c;统称为linux系统IO。 文件描述符(File descirptor)…

笔试算法day01

目录 1.除2 2.Fibonacci数列&#xff08;Fib 数列&#xff09; 3.单词搜索 1.除2 除2&#xff01; (nowcoder.com) 算法思路&#xff1a; 只需要对最大的n个偶数进行/2即可。 将所有的偶数存进大根堆中&#xff0c;执行k次操作即可 #include <iostream> #include <…

2024年AI知识库哪家强?8款主流软件对比分析

在当今这个信息爆炸的时代&#xff0c;如何高效地管理、搜索和共享知识成为了一个重要的问题。AI知识库作为一种先进的解决方案&#xff0c;正受到越来越多企业和个人的青睐。本文将对比分析8款主流的AI知识库软件&#xff0c;帮助大家找到最适合自己的工具。 1. HelpLook AI知…

机器学习K近邻算法——回归问题K近邻算法示例

针对“数据4.1”&#xff0c;讲解回归问题的K近邻算法&#xff0c;以V1&#xff08;营业利润水平&#xff09;为响应变量&#xff0c;以V2&#xff08;固定资产投资&#xff09;、V3&#xff08;平均职工人数&#xff09;、V4&#xff08;研究开发支出&#xff09;为特征变量。…

Flutter 进阶:根据IP地址判断用户国家/地区

在应用开发中根据IP地址判断用户国家/地区的两种方法 引言 在开发国际化应用时&#xff0c;了解用户的地理位置至关重要。这不仅影响用户体验&#xff0c;还关系到内容展示和合规性。本文将介绍两种通过IP地址判断用户所在国家或地区的方法。 方法一&#xff1a;使用 ip-api…

redis高级(面试题二)

目录 一、redis的五大数据结构有哪些&#xff1f;zset底层是什么结构&#xff1f; 1、redis五大数据结构有哪些&#xff1f; 2、什么是skiplist&#xff1f; 3、zset底层是什么结构&#xff1f; 二、Redis的内存过期策略是什么&#xff1f;Redis的内存淘汰策略有哪些&#…

【专题】数据库系统的基本原理

1. 数据库系统概述 1.1. 数据库系统的应用 电信业、银行业、金融业、销售业、联机的零售商、大学、航空业、人力资源、制造业等等。 1.2 数据库系统的概念 (1) 数据&#xff08;Data&#xff09; 数据是数据库存储的基本对象。是描述现实世界中各种具体事物或抽象概念的、可…