Redis数据类型之list

上篇文章:

Redis数据类型之hashhttps://blog.csdn.net/sniper_fandc/article/details/149139615?fromshare=blogdetail&sharetype=blogdetail&sharerId=149139615&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link

目录

1 lpush、lpushx和lrange

2 rpush和rpushx

3 lpop和rpop

4 lindex、linsert和llen

5 lrem

6 ltrim和lset

7 blpop和brpop

8 list的使用场景


        list是列表,实际上更接近双端队列,支持头插、尾差、头删和尾删等基本操作,可以用来充当栈或队列的使用。

1 lpush、lpushx和lrange

        命令:lpush key value1 value2 ...

        头插插入list多个元素。时间复杂度O(N),N表示插入元素的个数。返回值是list的长度。如果key不存在就创建;如果key存在就头插。因为是头插,所以最后插入的元素会在list的第一个位置。

        命令:lrange key start end

        查询list下标范围[start,end]的元素。时间复杂度O(N),N表示查询元素的个数。返回值按下标顺序的各元素。同样,下标也支持负数下标(表示倒数第几个)。如果下标超出范围,redis就会尽可能纠正下标到正确范围

        命令:lpushx key value1 value2 ...

        如果key存在,头插插入list多个元素;否则不插入。时间复杂度O(N),N表示插入元素的个数。返回值是list的长度。

2 rpush和rpushx

        命令:rpush key value1 value2 ...

        尾插插入list多个元素。时间复杂度O(N),N表示插入元素的个数。返回值是list的长度。如果key不存在就创建;如果key存在就尾插。因为是尾插,所以最先插入的元素会在list的第一个位置。

        命令:rpushx key value1 value2 ...

        如果key存在,尾插插入list多个元素;否则不插入。时间复杂度O(N),N表示插入元素的个数。返回值是list的长度。

3 lpop和rpop

        命令:lpop key

        头删key的list的元素。时间复杂度O(1)。返回值是被删除的元素或nil。

        命令:rpop key

        尾删key的list的元素。时间复杂度O(1)。返回值是被删除的元素或nil。

        可以搭配lpush和rpush实现队列或栈。(lpush和lpop)或(rpush和rpop)是栈,(lpush和rpop)或(rpush和lpop)是队列。

        注意:在redis 6.2版本后引入count参数可以一次删除多个元素。比如lpop key count,连续头删key对应list的count个元素。

4 lindex、linsert和llen

        命令:lindex key index

        获取list中下标index的元素。时间复杂度O(N),N是list的长度,这里因为list的底层实现可能是链表,链表查询是O(N)的复杂度。返回值是查询的元素或nil。

        命令:linsert key before | after element value

        在element元素前(before)或后(after)插入value。时间复杂度O(N),N是list的长度。返回值是list的长度。

        如果list中有重复的元素,就会从list头开始从左向右遍历找到第一个重复的元素进行插入:

        命令:llen key

        返回list的长度。时间复杂度O(1)。

5 lrem

        命令:lrem key count element

        删除list中count个元素element。时间复杂度O(N+M),N是list长度,M是删除的个数。如果count>0,从左往右删:

        如果count<0,从右往左删:

        如果count==0,删除全部满足value==element的元素:

6 ltrim和lset

        命令:ltrim key start end

        保留[start,end]的元素,其余的全部删除。时间复杂度O(N),N是list长度。

        命令:lset key index element

        把下标index的元素修改为element。时间复杂度O(N),N是list长度。如果下标越界则报错。

7 blpop和brpop

        blpop和brpop是lpop和rpop的阻塞版本,即当list为空时,执行blpop和brpop会阻塞(在此期间redis服务器可以执行其他命令),直到超出设置的阻塞时间或list不空;如果list不空,执行效果就如同lpop和rpop。

        blpop和brpop命令可以同时指定多个key,从左向右遍历key,只要有一个key的list弹出元素,就视为执行成功,命令立即返回。

        如果多个客户端并发对一个key执行blpop或brpop,在list为空时,如果阻塞时间内list有新元素,则会优先给最先执行的命令返回元素。

        命令:blpop key1 key2 ... timeout

        返回值是二元组,包括哪个key和对应弹出的元素。

        当list6和list7都没有元素了,此时再执行命令就会阻塞,直到其他客户端使用相关命令向list6或list7插入元素。

        31.63s表示阻塞的时间。brpop命令类似,不再演示。

        注意:timeout在redis 5设置时必须是整数的秒,但是redis 6以后就引入了小数的秒。

8 list的使用场景

        list最常用于多个同属于一个元素的值的存储(一对多场景),比如一个班级有多个学生。还有个作用是作为消息队列使用:消息队列需要使用阻塞队列作为数据结构,而list的实现类似双端队列,提供两端的存和取。利用lpush和brpop(需要用到阻塞),可以实现生产者往阻塞队列放元素,消费者取元素,如果没有元素可取就阻塞等待。

        在分布式系统中,往往需要解耦。对消息的传递也可以解耦,即利用多个频道,每个频道传递不同的消息,生产者负责往不同频道写消息,消费者负责从多个不同频道读消息,这里的多个频道就是多个list。

下篇文章:

Redis数据类型之sethttps://blog.csdn.net/sniper_fandc/article/details/149139848?fromshare=blogdetail&sharetype=blogdetail&sharerId=149139848&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link

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

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

相关文章

在 Windows 上安装和配置 Kafka

消息代理是一种软件&#xff0c;充当在不同应用程序之间发送消息的中介。它的功能类似于服务器&#xff0c;从一个应用程序&#xff08;称为生产者&#xff09;接收消息&#xff0c;并将其路由到一个或多个其他应用程序&#xff08;称为消费者&#xff09;。消息代理的主要目的…

FPGA实现SDI转LVDS视频发送,基于GTP+OSERDES2原语架构,提供工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目本博已有的 SDI 编解码方案FPGA实现LVDS视频收发方案 3、工程详细设计方案工程设计原理框图SDI 输入设备Gv8601a 均衡器GTP 高速接口-->解串SMPTE SD/HD/3G SDI IP…

uniapp+vue3项目实现:H5的文件预览、文件下载功能(文章参考)

uniappvue3项目实现&#xff1a;H5的文件预览、文件下载功能&#xff08;文章参考&#xff09; 文章参考&#xff1a; uniapp的移动端h5实现文件下载兼容手机各版本浏览器 uni-app之微信小程序实现‘下载保存至本地预览’功能 uniapp&#xff1a;h5和微信小程序文件下载方式

汽车功能安全-软件单元验证 (Software Unit Verification)【定义、目的、要求建议】6

文章目录1 软件单元验证 (Software Unit Verification)2 ISO 26262-6对单元验证的实施要求和建议2.1 要求和建议2.2 通俗易懂的解释与总结2.3 示例2.3.1 场景1&#xff1a;电动助力转向系统 (EPS)2.3.2 场景2&#xff1a;自动紧急制动系统 (AEB)2.3.3 示例模型验证2.4 核心要点…

提示工程:突破Transformer极限的计算科学

Why Prompt Design Matters and Works: A Complexity Analysis of Prompt Search Space in LLMs 提示工程如何从经验技巧升级为系统科学 一、Transformer的先天缺陷:计算深度固化与信息丢失 原理 Transformer架构的计算能力存在固有局限: 计算深度固化:其隐状态仅在层间…

【2025/07/11】GitHub 今日热门项目

GitHub 今日热门项目 &#x1f680; 每日精选优质开源项目 | 发现优质开源项目&#xff0c;跟上技术发展趋势 &#x1f4cb; 报告概览 &#x1f4ca; 统计项&#x1f4c8; 数值&#x1f4dd; 说明&#x1f4c5; 报告日期2025-07-11 (周五)GitHub Trending 每日快照&#x1f55…

LeetCode 278. 第一个错误的版本

LeetCode 278. 第一个错误的版本 解析 这个问题要求找到第一个错误的版本&#xff0c;其中给定一个 API isBadVersion(version) 可以判断某个版本是否错误。由于版本号是有序的&#xff0c;且错误版本之后的所有版本都是错误的&#xff0c;因此可以使用二分查找高效地定位第一个…

【RK3568+PG2L50H开发板实验例程】FPGA部分 | Pango 的时钟资源——锁相环

本原创文章由深圳市小眼睛科技有限公司创作&#xff0c;版权归本公司所有&#xff0c;如需转载&#xff0c;需授权并注明出处&#xff08;www.meyesemi.com) 1.实验简介 实验目的&#xff1a; 了解 PLL IP 的基本使用方法。 实验环境&#xff1a; Window11 PDS2022.2-SP6.4…

Graph Contrastive Learning with Generative Adversarial Network基于生成对抗网络的图对比学习

1. 什么是图&#xff1f;&#xff08;Graph&#xff09;想象一下社交网络&#xff0c;每个人是一个“点”&#xff08;节点&#xff09;&#xff0c;他们之间的朋友关系是“线”&#xff08;边&#xff09;。这样的点和线组成的结构就是“图”。在计算机科学中&#xff0c;图被…

PyTorch中的torch.argmax()和torch.max()区别

在PyTorch中&#xff0c;torch.argmax()和torch.max()都是针对张量操作的函数&#xff0c;但它们的核心区别在于返回值的类型和用途&#xff1a;1. torch.argmax() 作用&#xff1a;仅返回张量中最大值所在的索引位置&#xff08;下标&#xff09;。返回值&#xff1a;一个整数…

WebSocket主从服务器架构完整教程

目录 1. 前言:为什么要学习WebSocket主从架构 第一章:基础知识准备 2.1 什么是WebSocket 生活中的例子 技术特点 2.2 WebSocket vs HTTP 什么时候用WebSocket? 2.3 什么是主从架构 生活中的例子 技术架构图 2.4 环境准备 需要的软件 项目结构 第二章:WebSock…

Java的extends通配符

在Java泛型中&#xff0c;extends通配符用于限定泛型类型的上界&#xff0c;即指定泛型可以是某个类型或其子类型。它有两种常见用法&#xff1a;类型参数限定和通配符限定&#xff0c;下面详细介绍&#xff1a; 1. 类型参数限定&#xff08;在类/方法定义中&#xff09; 在定义…

vue自定义提示框组件

不想要elementui的消息提示&#xff0c;自定义一个组件系统统一使用 一、写页面 vue &#xff08;我放的目录是src/plugins/message.vue&#xff09;&#xff08;这里面使用elementui 里面icon 需要单独引入&#xff09; <template><Transition name"down"&…

自动驾驶数据集综述:统计特征、标注质量与未来展望

自动驾驶数据集综述&#xff1a;统计特征、标注质量与未来展望 A Survey on Autonomous Driving Datasets: Statistics, Annotation Quality, and a Future Outlook 得益于硬件和深度学习技术的快速进步&#xff0c;自动驾驶近年来迅速发展并展现出良好的性能。高质量的数据集…

redis数据结构和数据类型

1.动态字符串SIMPLE DYNAMIC STRING(SDS)观察上图中的SDS结构&#xff0c;头部包含字符串长度和分配的空间&#xff0c;可以以O&#xff08;1&#xff09;的时间复杂度计算出字符串长度&#xff0c;并且有了字符串长度后可以无视c语言的字符串缺陷&#xff08;\0作为结尾标识&a…

深度学习--神经网络

一、深度学习的简单概念深度学习是一种模仿人类大脑的运行方式&#xff0c;从大量数据中学习特征的学习模式。深度学习是机器学习的子集&#xff0c;它与机器学习的关系如下&#xff1a;二、感知神经网络2.1简单定义神经网络&#xff08;Neural Networks&#xff09;是一种模拟…

.NET 程序的强名称签名与安全防护技术干货

在 .NET 开发领域&#xff0c;保障程序的安全性和完整性至关重要。强名称签名和有效的安全防护措施是实现这一目标的关键手段。下面将详细介绍 .NET 程序的强名称签名以及相关的安全防护方法。一、什么是强名称签名强名称签名是 .NET 框架提供的一种安全机制&#xff0c;其主要…

DNS(Domain Name System,域名系统)

目录 **一、DNS的核心功能****二、DNS的工作原理****1. 解析流程(以车载导航请求为例)****2. 关键机制****三、车载以太网中DNS的特殊性**1. **高可靠性要求**2. **低延迟优化**3. **安全挑战与防护****四、DNS相关协议与技术****五、车载DNS配置示例****六、DNS故障排查工具…

优化 ECharts 多条折线:折线数据不完整导致的X轴日期错乱问题

目录 一、简单介绍 1.1 常见类型 二、时间轴错乱问题 2.1 示例 2.2 示例完整代码 2.3 问题分析 2.4 修复方法 第一步 第二步 2.5 优化后完整代码 一、简单介绍 ECharts 是一款基于 JavaScript 的数据可视化图表库&#xff0c;动态图表是 ECharts 的一个重要应用场景…

网络安全之注入攻击:原理、危害与防御之道

网络安全之注入攻击&#xff1a;原理、危害与防御之道 引言 在OWASP Top 10安全风险榜单中&#xff0c;注入攻击常年占据首位。2023年Verizon数据泄露调查报告显示&#xff0c;67%的Web应用漏洞与注入类攻击直接相关。本文从技术视角系统解析注入攻击的核心原理、典型场景及防御…