Redis——list类型详解

news2024/10/6 16:19:02

概要

Redis中的list类型相当于双端队列,支持头插,头删,尾插,尾删,并且列表中的内容是可以重复的。

如果搭配使用rpush和lpop,那么就相当于队列
如果搭配使用rpush和rpop,那么就相当于栈
在这里插入图片描述

lpush

向列表中头插一个或多个元素,返回list的长度。如果key已经存在,并且对应的value不是list类型,则报错

当插入多个元素时,是一次头插,例如插入1,2,3,4,那么列表中是4,3,2,1
在这里插入图片描述
演示:
在这里插入图片描述

lrange

查看list指定区间内的元素,前闭后闭,支持负数(-1就相当于倒数第一个元素),下标从0开始,因此查看全部元素就是0,-1
在这里插入图片描述演示:
在这里插入图片描述
展示的元素前面的序号并不是下标,而是结果集专用的序号

需要注意的是,如果我们给的下标超出了list的范围,如果是其他语言,可能就会报错或者抛出异常。但是在Redis中会尽可能的获取对应的内容,这体现了Redis的鲁棒性
在这里插入图片描述

lpushx

从左侧插入,当key不存在,用法和lpush一致,当key存在,则插入失败,返回0
在这里插入图片描述
演示:
在这里插入图片描述

Rpush

向列表中尾插一个或多个元素,返回list的长度。如果key已经存在,并且对应的value不是list类型,则报错
在这里插入图片描述
演示:
在这里插入图片描述

rpushx

从右侧插入,当key不存在,用法和lpush一致,当key存在,则插入失败,返回0
在这里插入图片描述
演示:
在这里插入图片描述

lpop

头删list中的元素,返回取出的元素的值。当列表为空则返回nil
在这里插入图片描述
演示:
在这里插入图片描述

rpop

尾删list中的元素,返回取出的元素的值。当列表为空则返回nil
在这里插入图片描述
演示:
在这里插入图片描述

lindex

获取到指定位置的元素,时间复杂度为O(N),如果下标非法则返回nil
在这里插入图片描述

演示:
在这里插入图片描述

linsert

在list的指定处插入元素,如果是before就插入在基准值前面,如果是after就插入到基准值后面,基准值是在list中存在的值而非下标,时间复杂度是O(N)

在这里插入图片描述
演示:
在这里插入图片描述
如果存在多个相同的基准值,那么只插入到第一个基准值处

llen

获取列表的长度,如果key不存在则返回0

在这里插入图片描述

lrem

删除指定的值,count为要删除的个数

count的值作用
count > 0从头到尾,删除count个指定的元素
count < 0删除所有指定的元素
count = 0从尾到头,删除count个指定的元素

在这里插入图片描述
演示:
在这里插入图片描述

ltrim

保留列表中start和stop之间的元素,删除两边的元素

在这里插入图片描述
演示:
在这里插入图片描述

lset

根据指定的下标,修改元素,如果下标越界,则报错
在这里插入图片描述
演示:
在这里插入图片描述

blpop/brpop

类似于阻塞队列,如果队列为空,尝试出队列,阻塞队列根据阻塞时间产生阻塞,期间Redis可以执行其他命令,直到队列不空,返回元素(如果超时了就返回nil)

命令中可以设置多个key,从左到右遍历key,哪个key的list中不空,则返回元素
在这里插入图片描述
演示:
队列不为空:
在这里插入图片描述
队列为空时:
先设置过期时间是100s
在这里插入图片描述
这边的客户端就阻塞了,启动另一个服务器,往队列里插入元素
在这里插入图片描述
这个服务器插入完元素,上一个服务器就返回元素了
在这里插入图片描述

内部编码

编码方式细节
ziplist 压缩列表列表元素个数小于512个同时每个元素的长度小于64字节
linkedlist 俩表不满足上述条件

上述编码方式是老版本的Redis使用的,新版本的Redis使用了quicklist,相当于链表和压缩列表的结合,整体是一个链表,每个链表的节点是一个压缩链表
在这里插入图片描述

应用场景

作为数组存储多个元素

例如sql中有下面这两张表
在这里插入图片描述
那么在Redis中可以通过以下关联关系进行组织数据
在这里插入图片描述

作为消息队列

在这里插入图片描述
这三个消费者谁先执行brpop命令,谁就可以先拿到新来的元素

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

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

相关文章

皮爷咖啡基于亚马逊云科技的数据架构,加速数据治理进程

皮爷咖啡&#xff08;Peet’s Coffee&#xff09;是美国精品咖啡品牌&#xff0c;于2017年进入中国&#xff0c;为中国消费者带来传统经典咖啡饮品&#xff0c;并特别呈现更加丰富的品质咖啡饮品体验。通过深入应用亚马逊云科技云原生数据库产品Amazon Redshift以及Amazon DMS等…

开源的密码学工具库:openssl安装在docker容器环境Linux(ubuntu18.04)

OpenSSL&#xff08;Open Secure Socket Layer&#xff09;是一个开源的密码学工具库&#xff0c;它提供了一系列的加密、解密、认证和通信安全相关的功能。OpenSSL 最初是为了支持安全的网络通信而设计的&#xff0c;但后来它的功能逐渐扩展到了许多不同的领域&#xff0c;包括…

【SSL证书】阿里云免费 SSL证书申请 + nginx 部署全解

一、环境 二、步骤 三、实战 Stage 1&#xff1a;申请免费证书 1. 进入 - 数字证书管理服务(SSL证书&#xff09; 2. 创建证书 3. 申请证书 Stage 2&#xff1a;域名解析 1. 进入 - 域名管理 2. 点击 - 域名 3. 点击 - 域名解析 4. 点击 - 添加记录 5. 返回 - 数…

润和软件HopeStage操作系统正式上架阿里云、华为云、腾讯云商店

近日&#xff0c;润和软件HopeStage操作系统正式上架阿里云、华为云、腾讯云商店。 随着科技的发展&#xff0c;云服务成为现代社会信息和资讯的交换、共享、存储、检索、应用等重要方式。阿里云、华为云、腾讯云作为我国云服务市场三巨头&#xff0c;其云商店产品全面覆盖云、…

spring(15) SpringBoot启动过程

目录 一、过程简介二、过程流程图三、源码分析1、运行 SpringApplication.run() 方法2、确定应用程序类型3、加载所有的初始化器4、加载所有的监听器5、设置程序运行的主类6、开启计时器7、将 java.awt.headless 设置为 true8、获取并启用监听器9、设置应用程序参数10、准备环境…

【Golang系统开发】搜索引擎(2) 压缩词典

写在前面 这篇文章我们就给出一系列的数据结构&#xff0c;使得词典能达到越来越高的压缩比。当然&#xff0c;和倒排索引记录表的大小相比&#xff0c;词典只占据了非常小的空间。那么为什么要对词典进行压缩呢&#xff1f; 这是因为决定信息检索系统的查询响应时间的一个重…

《计算机网络:自顶向下方法》第五章--网络层:控制平面

控制平面作为一种网络范围的逻辑&#xff0c;不仅控制沿着从源主机到目的主机的端到端路径间的路由器如何转发数据报&#xff0c;而且控制网络层组件和服务如何配置和管理 传统上&#xff0c;控制平面功能与数据平面的转发功能在一起实现&#xff0c;在路由器中作为统一的整体…

IDEA 如何制作代码补丁?IDEA 生成 patch 和使用 patch

什么是升级补丁&#xff1f; 比如你本地修复的 bug&#xff0c;需要把增量文件发给客户&#xff0c;很多场景下大家都需要手工整理修改的文件&#xff0c;并整理好目录&#xff0c;这个很麻烦。那有没有简单的技巧呢&#xff1f;看看 IDEA 生成 patch 和使用 patch 的使用。 介…

Kafka—工作流程、如何保证消息可靠性

什么是kafka&#xff1f; 分布式事件流平台。希望不仅仅是存储数据&#xff0c;还能够数据存储、数据分析、数据集成等功能。消息队列&#xff08;把数据从一方发给另一方&#xff09;&#xff0c;消息生产好了但是消费方不一定准备好了&#xff08;读写不一致&#xff09;&am…

常量(constant)

1、概述 常量&#xff1a;是指在Java程序运行期间固定不变的数据。 2、分类 类型含义数据举例整数常量所有的整数0&#xff0c;1&#xff0c;567&#xff0c;-9 小数常量 &#xff08;浮点数常量&#xff09; 所有的小数0.0&#xff0c;-0.1&#xff0c;2.55字符常量单引号引起…

Python量化交易11——使用AKShare获取公司财务数据

AKshare库是一个很好用的金融数据获取的API&#xff0c;股票的数据很全面&#xff0c;还有很多别的数据&#xff1a; 链接&#xff1a;AKShare 股票数据 — AKShare 1.10.85 文档 他们获取来源都是东方财富网或者巨潮网等&#xff0c;都会写上的。 本次教大家怎么用AKshare获取…

第九章 动态规划part11(代码随想录)

123.买卖股票的最佳时机III 给定一个数组&#xff0c;它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意&#xff1a;你不能同时参与多笔交易&#xff08;你必须在再次购买前出售掉之前的股票&…

vscode如何汉化

首先我们到vscode官网下载 链接如下&#xff1a; Visual Studio Code - Code Editing. Redefined 根据自己需要的版本下载就好 下载并且安装完毕之后 运行vscode 然后按快捷键 CTRLSHIFTX 打开安装扩展界面 搜索简体中文 安装就可以了 谢谢大家观看

Matplotlib数据可视化(一)

目录 1.Matplotlib简介 2.Matplotlib绘图基础 2.1 创建画布与子图 2.2 添加画布属性 2.3 绘图的保存与显示 1.Matplotlib简介 Matplotlib是一个用于绘制数据可视化图表的Python库。它提供了广泛的功能和灵活性&#xff0c;可以创建各种类型的图表&#xff0c;包括折线图、…

Microsoft Edge浏览器开启ChatAI扩展

ChatAi每日可以免费使用5次&#xff0c;购买每月8.8&#xff0c;每年88。价格还不算贵 安装扩展过程&#xff1a; 打开 Microsoft Edge浏览器&#xff0c;点击右上角三个点&#xff0c;在扩展中选择加载项&#xff0c;在Microsoft Edge加载项中搜索openai&#xff0c;选择Chat…

kafka晋升之路-理论+场景

kafka晋升之路 一&#xff1a;故事背景二&#xff1a;核心概念2.1 系统架构2.2 生产者&#xff08;Producer&#xff09;2.2.1 生产者分区2.2.2 生产者分区策略 2.3 经纪人&#xff08;Broker&#xff09;2.3.1 主题&#xff08;Topic&#xff09;2.3.2 分区&#xff08;Partit…

人工智能与云计算实训室建设方案

一、 人工智能与云计算系统概述 人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;是一种模拟人类智能的科学和工程&#xff0c;通过使用计算机系统来模拟、扩展和增强人类的智能能力。人工智能涉及多个领域&#xff0c;包括机器学习、深度学习、自然…

k8s简介及虚拟机快速搭建k8s集群

文章目录 1、k8s简介1.1、部署方式的变迁1.2、定义1.3、Kubernetes提供的功能 2、虚拟机快速搭建k8s集群2.1、虚拟机配置&#xff08;centos7 2G内存2个处理器&#xff09;2.2、基础环境准备2.3、docker安装&#xff08;易踩坑&#xff09;2.4、安装k8s组件2.5、master节点部署…

英飞凌在车辆信息安全方面上应用

如今&#xff0c;网络安全在多个层面影响着我们每个人。我们的专业工作、个人生活&#xff0c;甚至我们的汽车&#xff0c;都依赖于复杂软件上运行的连接和技术。随着信息技术日益融入我们的日常生活&#xff0c;我们对后续信息系统的依赖性也与日俱增。反过来&#xff0c;这些…

Win10+anaconda+CUDA+pytorch+vscode配置

Win10anacondaCUDApytorchvscode配置 1.安装anaconda2.安装CUDA确认CUDA版本确认CUDA和pytorch版本安装CUDA 3.安装cudnn4.安装Pytorch5.vscode配置安装VScodevscode配置pytorch环境 1.安装anaconda 官网https://www.anaconda.com 下载安装&#xff0c;路径全英文然后记得有一…