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

Redis——常用数据类型List

目录

      • List列表
        • 常用命令
          • lpush
          • lpushx
          • rpush
          • rpush
          • lrange
          • lpop
          • rpop
          • lindex
          • linsert
          • llen
          • lrem
          • ltrim key start stop
          • lset
        • 阻塞版本命令
          • blpop
          • brpop
        • list的编码方式
        • list的应用

List列表

Redis中的list相当于数组,或者 顺序表,一些常用的操作可以通过下面这张图来理解

在这里插入图片描述

实际上,这个并不是一个简单的数组,而是类似于一个“双端队列”

在这里插入图片描述

列表类型的特点:

  1. 列表中的元素是有序的,这意味着可以通过索引下标获取某个元素或者某个范围的元素列表,例如要上图的第 5 个元素,可以执行 lindex user:1:messages 4 或者倒数第 1 个元素,lindexuser:1:messages -1 就可以得到元素 e
  2. 区分获取和删除的区别,例如图 2-20 中的 lrem 1 b 是从列表中把从左数遇到的前 1 个 b 元素删除,这个操作会导致列表的长度从 5 变成 4;但是执⾏ lindex 4 只会获取元素,但列表长度是不会变化的
  3. 列表中的元素是允许重复的,如下图

在这里插入图片描述

常用命令
lpush
LPUSH key element [element ...]//将⼀个或者多个元素从左侧放⼊(头插)到 list 中
//时间复杂度:只插⼊⼀个元素为 O(1), 插⼊多个元素为 O(N), N 为插⼊元素个数
//返回值:插⼊后 list 的⻓度
lpushx
 LPUSHX key element [element ...]//在 key 存在时,将⼀个或者多个元素从左侧放⼊(头插)到 list 中。不存在,直接返回
//时间复杂度:只插⼊⼀个元素为 O(1), 插⼊多个元素为 O(N), N 为插⼊元素个数
//返回值:插⼊后 list 的⻓度
rpush
RPUSH key element [element ...]//将⼀个或者多个元素从右侧放⼊(尾插)到 list 中
//时间复杂度:只插⼊⼀个元素为 O(1), 插⼊多个元素为 O(N), N 为插⼊元素个数
//返回值:插⼊后 list 的⻓度
rpush
RPUSHX key element [element ...]//在 key 存在时,将⼀个或者多个元素从右侧放⼊(尾插)到 list 中
//时间复杂度:只插⼊⼀个元素为 O(1), 插⼊多个元素为 O(N), N 为插⼊元素个数
//返回值:插⼊后 list 的⻓度
lrange
 LRANGE key start stop//获取从 start 到 end 区间的所有元素,左闭右闭,下标支持负数
//时间复杂度:O(N)
//返回值:指定区间的元素,如果给定区间非法,比如超出下标,Redis中会尽可能的获取区间的内容
lpop
LPOP key [count](redis 6.2版本及其以上支持这个count,一次pop多个)//从 list 左侧取出元素(即头删)
//时间复杂度:O(1)
//返回值:取出的元素或者 nil
rpop
RPOP key [count](redis 6.2版本及其以上支持这个count,一次pop多个)//从 list 右侧取出元素(即尾删)
//时间复杂度:O(1)
//返回值:取出的元素或者 nil
lindex
LINDEX key index//获取从左数第 index 位置的元素
//时间复杂度:O(N)
//返回值:取出的元素或者 nil
linsert
LINSERT key <BEFORE | AFTER> pivot element//在特定位置插⼊元素 , before和after选一个,在privot之前插入,或者之后插入,这个pivot是元素的值,不是下标
//时间复杂度:O(N)
//返回值:插⼊后的 list ⻓度
llen
LLEN key//获取 list ⻓度
//时间复杂度:O(1)
//返回值:list 的⻓度
lrem
LREM key count element//指定一个元素精准删除//count为要删除的个数,element为要删除的值
//count>0,从左往右删除element两次
//count<0,从右往左删除element两次
//count=0,删除所有的element
ltrim key start stop
LTRIM key start stop//保留start和stop之间的元素(区间外两边的元素就直接被删除了)
//时间复杂度O(n)
lset
LSET key index element//根据下标修改元素
//时间复杂度O(n)
阻塞版本命令

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

  • 在列表中有元素的情况下,阻塞和非阻塞表现是⼀致的。但如果列表中没有元素,非阻塞版本会理解返回 nil,但阻塞版本会根据 timeout,阻塞⼀段时间,期间 Redis 可以执行其他命令,但要求执行该命令的客户端会表现为阻塞状态
  • 命令中如果设置了多个键,那么会从左向右进⾏遍历键,⼀旦有⼀个键对应的列表中可以弹出元素,命令立即返回
  • 如果多个客⼾端同时多⼀个键执⾏ pop,则最先执⾏命令的客⼾端会得到弹出的元素

redis中的list也相当于阻塞队列一样,线程安全是通过单线程模型支持的,阻塞。则只支持队列为空的情况,不考虑队列满

blpop和brpop都是可以同时去尝试多个key的列表的元素的,多个key对应多个list,这多个list哪个有元素了,就会返哪个元素

blpop
BLPOP key [key ...] timeout//LPOP 的阻塞版本
//时间复杂度:O(1)
//返回值:取出的元素或者 nil
brpop
BRPOP key [key ...] timeout//RPOP 的阻塞版本
//时间复杂度:O(1)
//返回值:取出的元素或者 nil
list的编码方式

列表类型的内部编码有两种:

  1. ziplist(压缩列表):当列表的元素个数小于 list-max-ziplist-entries 配置(默认 512 个),同时列表中每个元素的长度都小于 list-max-ziplist-value 配置(默认 64 字节)时,Redis 会选用 ziplist 来作为列表的内部编码实现来减少内存消耗。。
  2. linkedlist(链表):当列表类型无法满足 ziplist 的条件时,Redis 会使⽤ linkedlist 作为列表的内 部实现。
list的应用

消息队列

**微博 Timeline

相关文章:

Redis——常用数据类型List

目录 List列表常用命令lpushlpushxrpushrpushlrangelpoprpoplindexlinsertllenlremltrim key start stoplset 阻塞版本命令blpopbrpop list的编码方式list的应用 List列表 Redis中的list相当于数组&#xff0c;或者 顺序表&#xff0c;一些常用的操作可以通过下面这张图来理解…...

前端基础知识+算法(一)

文章目录 算法二分查找条件注意方式基本原理左闭右闭正向写法 左闭右开正向写法 前端基础知识定时器及清除盒子垂直水平居中的方式垂直水平1.flex布局2.grid布局3.定位对于块级元素 解决高度塌陷的方式1.给父元素一个固定的高度2.给父元素添加属性 overflow: hidden;3.在子元素…...

photozoom classic 9解锁码2024年最新25位解锁码

photozoom classic 9 破解版顾及比恐龙还要稀有&#xff0c;我曾经和你一样一直再找&#xff0c;找了好几个月&#xff0c;也没有找到真的破解版&#xff0c;下载很多次&#xff0c; 都是病毒插件之类的 我昨天下了几次&#xff0c;没有一个不附带插件病毒木马的.......&#x…...

Oracle发邮件功能:设置的步骤与注意事项?

Oracle发邮件配置教程&#xff1f;如何实现Oracle发邮件功能&#xff1f; Oracle数据库作为企业级应用的核心&#xff0c;提供了内置的发邮件功能&#xff0c;使得数据库管理员和开发人员能够通过数据库直接发送邮件。AokSend将详细介绍如何设置Oracle发邮件功能。 Oracle发邮…...

优化理论及应用精解【9】

文章目录 二次型函数二次型函数详细解释一、定义二、性质三、应用四、示例五、图表辅助说明&#xff08;由于文本限制&#xff0c;无法直接提供图表&#xff09; “西尔维斯特准则”一、定义二、来源三、应用场景 参考文献 二次型函数 二次型函数详细解释 一、定义 二次型函…...

nginx实现https安全访问的详细配置过程

文章目录 前言什么是 HTTP&#xff1f;什么是 HTTPS&#xff1f;HTTP 和 HTTPS 的区别为什么 HTTPS 被称为安全的&#xff1f;配置过程配置自签名证书 前言 首先我们来简单了解一下什么是http和https以及他们的区别所在. 什么是 HTTP&#xff1f; HTTP&#xff0c;全称为“超…...

1. TypeScript基本语法

TypeScript 学习总结 TypeScript 是一种 JavaScript 的超集&#xff0c;增加了静态类型检查和编译时错误检测&#xff0c;从而提高了代码的可维护性和可靠性。以下是 TypeScript 的基础知识总结&#xff0c;包括语法、运算符、数据类型、变量声明和作用域。 ## 基本语法TypeS…...

C# UDP与TCP点发【速发速断】模式

1、UDP 客户端 //由于收发都在本机&#xff0c;所以只用一个IP地址 IPAddress addr IPAddress.Parse("127.0.0.1"); var ptLocal new IPEndPoint(addr&#xff0c;9001);//本机节点&#xff0c;用于发送var ptDst new IPEndPoint(addr&#xff0c;9002);//目标节点…...

pikachu下

CSRF(跨站请求伪造) CSRF(get) url变成了这样了&#xff0c;我们就可以新开个页面直接拿url去修改密码 http://pikachu-master/vul/csrf/csrfget/csrf_get_login.php?username1&password2&submitLogin CSRF(post&#xff09; 这里只是请求的方式不同&#xff0c;…...

Go语言开发im-websocket服务和vue3+ts开发类似微信pc即时通讯

前言 IM即时通讯聊天, 为软件开发者打造&#xff0c;不依赖第三方sdk&#xff0c;完全用Go语言开发即时通讯服务&#xff0c;支持H5、Electron、Wails 、Uniapp和各种小程序的IM即时通讯, 快速实现私聊、群聊、在线客服&#xff01;让你快速搭建一个微信聊天系统&#xff0c;打…...

Redis如何实现分布式锁

目录 获取锁&#xff1a; 释放锁&#xff1a; Lua脚本&#xff1a; Redisson 分布式锁是&#xff0c;满足分布式系统或集群模式下多进程可见并且互斥的锁&#xff0c;因为我们熟知的java中的锁只是在单体架构下单个jvm中才会生效&#xff0c;如果部署了多个jvm则会导致新的…...

面向对象程序设计之继承(C++)

1.继承的定义 1.1继承的概念 继承(inheritance)机制是⾯向对象程序设计使代码可以复⽤的最重要的⼿段&#xff0c;它允许我们在保持原有类特性的基础上进⾏扩展&#xff0c;增加⽅法(成员函数)和属性(成员变量)&#xff0c;这样产⽣新的类&#xff0c;称派⽣类。继承 呈现了⾯向…...

IAPP发布《2024年人工智能治理实践报告》

文章目录 前言一、黑箱问题►透明度、可理解性与可解释性二、法律和政策中的注意事项►欧盟的《通用数据保护条例》►欧盟的AI法案►NIST的AI风险管理框架►美国的第14110号行政命令►《生成式人工智能服务管理暂行办法》►新加坡的AI验证三、实施人工智能治理►模型卡与系统卡…...

了解MySQL 高可用架构:主从备份

为了防止数据库的突然挂机&#xff0c;我们需要对数据库进行高可用架构。主从备份是常见的场景&#xff0c;通常情况下都是“一主一从/(多从)”。正常情况下&#xff0c;都是主机进行工作&#xff0c;从机进行备份主机数据&#xff0c;如果主机某天突然意外宕机&#xff0c;从机…...

[OpenCV] 数字图像处理 C++ 学习——15像素重映射(cv::remap) 附完整代码

文章目录 前言1.像素重映射理论基础2.代码实现(1) remap()细节(2)水平翻转(2)垂直翻转(3)旋转 180 度(4)径向扭曲 3.完整代码 前言 像素重映射将图像中的每个像素映射到新位置&#xff0c;实现图像的扭曲、校正等操作。在 OpenCV 中&#xff0c;cv::remap() 函数就是用于实现这…...

Oreace每日运维操作

一&#xff0e;Oreace每日运维操作 目录 一&#xff0e;Oreace每日运维操作 1.1、确认所有的INSTANCE状态正常 1.2、检查文件系统的使用&#xff08;剩余空间&#xff09; 1.3 lwh暗码&#xff0c;&#xff0c;、检查日志文件和trace文件记录 1.4 lwh、检查数据库当日备份…...

【XR】AR HUD

1. AR HUD&#xff08;head up display&#xff09;原理 目标&#xff1a; 产业链上的各大Tier1及PGU企业都在积极开发这一技术&#xff0c;许多厂家已推出LCOS样机&#xff0c;比如说水晶光电、华阳集团、瀚思通、疆程已在北京车展或去年的上海车展上展出了LCOS方案的AR-HUD样…...

C/C++内存管理——内存泄漏/内存碎片

一、什么是内存泄漏 内存泄漏指的是在程序运行过程中,已经分配给程序使用的内存没有得到及时和正确的释放,导致这部分内存无法被程序再次使用或者被操作系统回收。内存泄漏通常发生在动态分配的内存上,如果这部分内存没有被正确释放,随着时间的推移,越来越多的内存将被占…...

使用 GaLore 预训练LLaMA-7B

项目代码&#xff1a; https://github.com/jiaweizzhao/galorehttps://github.com/jiaweizzhao/galore 参考博客&#xff1a; https://zhuanlan.zhihu.com/p/686686751 创建环境 基础环境配置如下&#xff1a; 操作系统: CentOS 7CPUs: 单个节点具有 1TB 内存的 Intel CP…...

gitlab无法push(pre-receive hook declined)

如果是个人的项目&#xff0c;托管在官网&#xff0c;可以参考这位大佬的&#xff0c; GitLab新建项目后push reject提交失败的解决办法_push rejected-CSDN博客 如果是公司的项目&#xff0c;去项目成员里看自己的身份&#xff0c;如果只是developer&#xff0c;是无法push到…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

2.3 物理层设备

在这个视频中&#xff0c;我们要学习工作在物理层的两种网络设备&#xff0c;分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间&#xff0c;需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质&#xff0c;假设A节点要给…...

《Offer来了:Java面试核心知识点精讲》大纲

文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...

如何通过git命令查看项目连接的仓库地址?

要通过 Git 命令查看项目连接的仓库地址&#xff0c;您可以使用以下几种方法&#xff1a; 1. 查看所有远程仓库地址 使用 git remote -v 命令&#xff0c;它会显示项目中配置的所有远程仓库及其对应的 URL&#xff1a; git remote -v输出示例&#xff1a; origin https://…...

qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001

qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类&#xff0c;直接把源文件拖进VS的项目里&#xff0c;然后VS卡住十秒&#xff0c;然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分&#xff0c;导致编译的时候找不到了。因…...