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

Redis中的List类型

目录

List类型的命令

lpush

lpushx

rpush

lrange

lpop

rpop

lindex

linsert

llen

lrem

ltrim

lset

阻塞命令

阻塞命令的使用场景

1.针对一个非空的列表进行操作

2.针对一个空的列表进行操作

3.针对多个key进行操作.

内部编码

lisi类型的应用场景

存储(班级)信息

消息队列

分频道的消息队列

微博Timeline


列表(List)相当于是数组或者是顺序表.

结构示意图

约定最左侧的元素下标是0,redis的下标支持负数下标.

注意list内部的编码方式并非是一个简单的数组,而是更接近于双端队列.

列表中的元素是有序的,指的并不是其按照元素的数据大小进行排列,而是意味着当你向列表中插入元素时,它们会按照插入的顺序进行排序(比如尾插abc,得到的列表也是abc),并且每个元素都有一个关联的索引值来表示其位置。

列表中的元素是允许重复的.

List类型的命令

lpush

将一个或者多个元素从左侧放入到list中.(头插)

LPUSH key element [element ...]
返回的是插入后list的长度.

时间复杂度是O(N),N代表插入元素的个数.

lpushx

当key存在时,将一个或者多个元素从左侧放入到list中,不存在则直接返回.

x->exists.

LPUSHX key element [element ...]
返回的是插入后list的长度.
时间复杂度是O(N),N代表插入元素的个数.

rpush

将一个或者多个元素从右侧放入到list中,尾插.

RPUSH key element [element...........]
返回的是插入后list的长度.

时间复杂度是O(N),N代表插入元素的个数.

rpushx,类似与lpushx,尾插,不存在直接返回.

lrange

LRANGE key start stop
获取从start到end区间的所有元素,闭区间.下标是支持负数的.
返回的是指定区间的元素.

对于超出下标的情况,redis会尽可能的获取对应的内容.

lpop

LPOP key

从list左侧取出元素,即头删.

返回的是取出的元素或者nil.

rpop

从list右侧取出元素,尾删.

RPOP key
返回的是取出的元素或者nil.

lindex

LINDEX key index

获取从左数第index位置的元素.

时间复杂度是O(N),N指的是list中元素的个数.

返回的是取出的元素或者是nil.

linsert

LINSERT key <BEFORE | AFTER> pivot element

返回的是插入后list的长度.

时间复杂度是O(N).N代表列表的长度.

如果进行插入的时候,基准值有多个,redis是从左往右找,找到第一个符合基准值的位置.

llen

获取list的长度.

LLEN key

时间复杂度是O(1).

时间复杂度为什么是O(1):这是因为Redis将列表的长度存储在列表对象的内部数据结构中,并且在每次插入或删除元素时都会更新该长度。因此,当执行LLEN命令时,Redis可以直接返回列表的长度,无需遍历整个列表,所以时间复杂度是固定的,与列表的长度无关。

lrem

lrem key count element

count表示要删除的个数,element表示要删除的值.

 当count>0时表示从左向右删除元素.

当count<0时表示从右向左删除元素.

当count=0时表示删除全部指定元素.


ltrim

LTRIM key start stop

保留start和stop之间区间内的元素,区间外面的元素就直接被删除了.

lset

LSET  key index element

根据下标修改元素.

时间复杂度:O(N).

如果下标越界会直接报错.


阻塞命令

blpop key [key.....] timeout

brpop key [key.....] timeout

blpop和brpop是lpop和rpop的阻塞版本.

相当于我们之前学习的阻塞队列一样.

当队列元素为满的时候,在往里插入元素会阻塞;当队列元素为空的时候,往外取元素也会阻塞.

redis只针对队列为空往外取的时候做了阻塞.因为redis中对于list什么时候为满没有明确的要求.

所以blpop和brpop.

blpop和brpop是lpop和rpop的阻塞版本,和对应的非阻塞版本的作用基本一致,除了:

1.在列表有元素的情况下,阻塞和非阻塞版本表现一致.但是如果列表为空,非阻塞版本会立即执行并返回nil,但阻塞版本会根据timeout阻塞一段时间,期间redis可以执行其他命令,但执行阻塞命令的客户端会表现为阻塞状态.

2.命令中如果设置了多个键,那么会从左向右进行遍历键,一旦有一个键对应的列表可以弹出元素,命令立即返回.

3.如果多个客户端对一个键执行brpop或blpop,最先执行命令的客户端会得到弹出的元素.


阻塞命令的使用场景

1.针对一个非空的列表进行操作

返回的结果是一个二元组,一方面告诉我们当前的数据来自哪个key,一方面告诉我们取到的数据是什么.

2.针对一个空的列表进行操作

返回二元组并且显示阻塞时间.

3.针对多个key进行操作.


内部编码

之前的版本list的内部编码是ziplist(压缩列表)和linkedlist(链表).

和hash类型的类似,当元素个数过多的时候,ziplist会转换为linkedlist;当某个value过长的时候,ziplist也会转换为linkedList.

同样也存在两个配置项:list-max-ziplist-entries和list-max-ziplist-value.

而现在的版本list的内部编码只有一个quicklist.

quicklist相当于是结合了链表和压缩列表.

整体还是一个链表,但是链表的每一个节点是一个压缩列表.

每个压缩列表都不要太大,同时再把多个压缩列表通过链式结构的方式连接起来.


lisi类型的应用场景

存储(班级)信息

用list作为像数组这样的结构,来存储多个元素.

用mysql表示两个表,一个学生表一个班级表.

通过这样的表结构,可以很方便的实现查询指定班级中有哪些同学.

而redis中没有这么强调的查询功能,我们只能设置合适的键值对来实现对应的效果.

学生的个人信息用hash表示,而班级信息我们就可以使用list类型来表示.

通过classStudent:1来获取对应的学生id.


消息队列

redis阻塞消息的队列模型

在当前的场景下,如果列表为空,消费者就会阻塞等待,直到有了数据或者到了timeout时间.

谁先执行brpop命令,谁就可以先拿到新来的数据.

如果消费者不停的brpop,这样的设定就能构成一个轮询的效果.

分频道的消息队列

多个频道的场景非常常见,比如一个短视频,可以有一个频道来传输短视频数据,还可以有一个频道来传输弹幕数据,还可以有一个频道来传输点赞,转发和收藏的数据,可以有一个频道来传输评论数据.

设置成多个频道,就可以在某种数据发生问题的时候,不会对其他数据造成影响.


微博Timeline

1.每篇微博使用hash结构存储.

2.向用户的timeline添加微博.user:<uid>:myblogs作为键.

3.分页获取用户的timeline,例如获取用户1的10篇微博.

相关文章:

Redis中的List类型

目录 List类型的命令 lpush lpushx rpush lrange lpop rpop lindex linsert llen lrem ltrim lset 阻塞命令 阻塞命令的使用场景 1.针对一个非空的列表进行操作 2.针对一个空的列表进行操作 3.针对多个key进行操作. 内部编码 lisi类型的应用场景 存储(班级…...

3D模型格式转换工具HOOPS Exchange:如何将3D PDF转换为STEP格式?

3D CAD数据在制造、工程和设计等各个领域都扮演着重要的角色。为了促进不同软件应用程序之间的协作和互操作性&#xff0c;它通常以不同的格式进行交换。 HOOPS Exchange是一个强大的软件开发工具包&#xff0c;提供了处理和将3D CAD数据从一种格式转换为另一种格式的解决方案…...

DB-GPT介绍

DB-GPT介绍 引言DB-GPT项目简介DB-GPT架构关键特性私域问答&数据处理多数据源&可视化自动化微调Multi-Agents&Plugins多模型支持与管理隐私安全支持数据源 子模块DB-GPT-Hub微调参考文献 引言 随着数据量的不断增长和数据分析的需求日益增多&#xff0c;将自然语言…...

Java,面向对象,内部类

内部类的定义&#xff1a; 将一个类A定义在另一个类B里面&#xff0c;里面的那个类A就称为内部类&#xff08;InnerClass&#xff09;&#xff0c;类B则称为外部类&#xff08;OuterClass&#xff09;。 内部类的使用场景: 类A只在类B中使用&#xff0c;便可以使用内部类的方法…...

唯一ID如何生成,介绍一下目前技术领域最常使用的几种方法

纵使十面大山&#xff0c;又如何&#xff0c;无妨… 概述 唯一ID&#xff08;Unique Identifier&#xff09;是在计算机科学和信息技术领域中用于标识某个实体或数据的唯一标识符。生成唯一ID的方法可以根据具体需求和应用场景的不同而有所不同。以下是一些目前技术领域中常用…...

【翻译】XL-Sum: Large-Scale Multilingual Abstractive Summarization for 44 Languages

摘要 当代的关于抽象文本摘要的研究主要集中在高资源语言&#xff0c;比如英语&#xff0c;这主要是因为低/中资源语言的数据集有限。在这项工作中&#xff0c;我们提出了XL-Sum&#xff0c;这是一个包含100万篇专业注释的文章摘要对的综合多样数据集&#xff0c;从BBC中提取&…...

配置OpenCV

Open CV中包含很多图像处理的算法&#xff0c;因此学会正确使用Open CV也是人脸识别研究的一项重要工作。在 VS2017中应用Open CV&#xff0c;需要进行手动配置&#xff0c;下面给出在VS2017中配置Open CV的详细步骤。 1.下载并安装OpenCV3.4.1与VS2017的软件。 2.配置Open CV环…...

1-时间复杂度和空间复杂度

为了找到最适合当前问题而估量“算法”的评价s 时间复杂度空间复杂度执行效率&#xff1a;根据算法编写出的程序&#xff0c;执行时间越短&#xff0c;效率就越高占用的内存空间&#xff1a;不同算法编写出的程序&#xff0c;执行时占用的内存空间也不相同。如果实际场景中仅能…...

EtherCAT主站SOEM -- 3 -- SOEM之ethercatconfig.h/c文件解析

EtherCAT主站SOEM -- 3 -- SOEM之ethercatconfig.h/c文件解析 一 ethercatconfig.h/c文件功能预览&#xff1a;二 ethercatconfig.h/c 中主要函数的作用&#xff1a;2.1.1 ec_config_init(uint8 usetable) 和 ecx_config_init(ecx_contextt *context, uint8 usetable)&#xff…...

洗地机哪个品牌好?家用洗地机选购攻略

随着家用洗地机的普及和市场的广泛认可&#xff0c;进入洗地机行业的制造商也越来越多。在面对众多洗地机品牌时&#xff0c;消费者常常感到困惑&#xff0c;不知道如何选择。面对众多选择&#xff0c;选择有良好保障的知名洗地机品牌是明智之举。知名品牌在质量、售后服务等方…...

Java数组的定义与常用使用方法

目录 一.什么是数组 二.数组的创建及初始化 数组的创建 数组的初始化 动态初始化&#xff1a; 静态初始化&#xff1a; 【注意】 三.数组的使用 数组中元素访问 遍历数组 四.数组作为方法的参数 参数传基本数据类型 参数传数组类型(引用数据类型) 作为方法的返回…...

[计算机网络]认识“协议”

认识“协议” 文章目录 认识“协议”序列化和反序列化网络计算器引入Sock类设计协议编写服务端类启动服务端编写客户端类启动客户端程序测试 序列化和反序列化 在网络体系结构中&#xff0c;应用层的应用程序会产生数据&#xff0c;这个数据往往不是简单的一段字符串数据&…...

“Notepad++“ 官网地址

notepad官网下载地址&#xff1a;https://notepad-plus-plus.org/downloads/ npp.8.5.8.Installer.x64 本下载地址- https://download.csdn.net/download/namekong8/88494023 1. Fix session file data loss issue. 2. Fix Explorer context menu "Edit with Notepad…...

基于单片机的自动感应门设计

博主主页&#xff1a;单片机辅导设计 博主简介&#xff1a;专注单片机技术领域和毕业设计项目。 主要内容&#xff1a;毕业设计、简历模板、学习资料、技术咨询。 文章目录 主要介绍一、自动感应门设计的功能概述二、系统总体方案2.1系统的总体计划2.2元器件的介绍2.2.1单片机的…...

【密评】商用密码应用安全性评估从业人员考核题库(二十-完结)

商用密码应用安全性评估从业人员考核题库&#xff08;二十-完结&#xff09; 国密局给的参考题库5000道只是基础题&#xff0c;后续更新完5000还会继续更其他高质量题库&#xff0c;持续学习&#xff0c;共同进步。 4640 单项选择题 在测评过程中遇到的PEM编码格式&#xff0c…...

Tigger绕过激活锁/屏幕锁隐藏工具,支持登入iCloud有消息通知,支持iOS12.0-14.8.1。

绕过激活锁工具Tigger可以用来帮助因为忘记自己的ID或者密码而导致iPhone/iPad无法激活的工具来绕过自己的iPhone/iPad。工具支持Windows和Mac。 工具支持的功能&#xff1a; 1.Hello界面两网/三网/无基带/乱码绕过&#xff0c;可以完美重启&#xff0c;支持iCloud登录、有消…...

VueX mapState、mapGetters、mapActions和mapMutaions 的使用

一、mapState和mapGetters 如果我们想要读取VueX中的State数据的Getters数据时&#xff0c;需要使用$store.state.数据名 和 $store.getters.数据名。 当我们State和getters中的数据多了以后&#xff0c;书写会很麻烦&#xff1a; 如果我们想要使用方便可以配置计算属性来简化…...

GMP标准的制药级层流细胞实验室核心要点

随着生物医药技术的飞速发展&#xff0c;制药行业对细胞疗法和细胞药物的需求日益增长。这推动了制药级层流细胞实验室的发展&#xff0c;其作为生物医药研发的关键基础设施&#xff0c;为制药企业提供了进行细胞培养、基因编辑、疫苗研发等工作的高效平台。本文就围绕GMP标准的…...

[免费] 适用于 Windows的10 的十大数据恢复软件

Windows 10是微软开发的跨平台和设备应用程序的操作系统。它启动速度更快&#xff0c;具有熟悉且扩展的“开始”菜单&#xff0c;甚至可以在多种设备上以新的方式工作。所以&#xff0c;Windows 10非常流行&#xff0c;我们用它来保存我们的照片、音乐、文档和更多文件。但有时…...

【halcon踩坑】区域为空但个数是1

背景 我在做瑕疵检测的时候&#xff0c;通过计算瑕疵区域的个数&#xff08;count_obj&#xff08;&#xff09;&#xff09;是否为0&#xff0c;来判断是否有瑕疵&#xff0c;如果不为0&#xff0c;那边我就会在图片上标记这个瑕疵的位置&#xff01; 但是有一次我发现明明没…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...