list.
列表(list)相当于是 数组 或者 顺序表list 内部编码方式并非是一个简单的数组,而是更接近于“双端队列”(deque)列表中的元素是有序的(元素位置),允许插入重复元素
常见命令
1)lpush lpushx rpush rpushx
lpush key element [element ...] —— 头插
返回 list 的长度 O(1)
lpushx key element [element ...]
当 key 存在是返回 list 的长度,否则直接返回 O(1) —— 头插
rpush key element [element ...] —— 尾插
返回 list 的长度 O(1)
rpush key element [element ...] —— 尾插
当 key 存在是返回 list 的长度,否则直接返回 O(1)
若果 key 已经存在,并且 key 对应的 value 类型不是 list,此时会报错
2)lrange
获取从 start 到 end 区间内的所有元素(左闭右闭)
lrange key start end (支持负数)
返回指点区间内的元素 O(N)
此处 数字 只是标识返回元素的顺序(结果集),和下标无关
当给出非法下标时,Redis 会尽可能的取到给定区间内的元素(鲁棒性)
3)lpop rpop
lpop key [count] —— 头删
返回指定区间内的元素或者 nil O(count)
rpop key [count] —— 尾删
返回指定区间内的元素或者 nil O(count)
Redis 中的 list 是一个双端队列,从两头插入/删除是非常高效的 O(1)
rpush + lpop ——> 队列
rpush + rpop ——> 栈
4)lindex
lindex key index
返回指定下表的元素 ,非法下标则返回 nil O(N)
正数表示从左数,负数反之,起始点为 0
5)linsert
linsert key <before | after> pivot element
返回插入后的 list 的长度 O(N)
pivot 基准值(从左往右) element 要插入的元素
6)len
len key
返回 list 的长度 O(1)
7)lrem
lrem key count element
返回删除的元素个数 O(1)
count 要删除的元素的个数 element 要删除的元素的值
8)ltrim
ltrim key count element
返回 ok O(N)
保留 start 和 stop 区间内的元素(区间外的被直接删除)
9)lset
lset key index element
返回 OK,若下表越界返回 nil O(1)
10)blpop brpop
blpop key [key ...] timeout —— 尾删
返回取出的元素或者 nil O(1)
brpop key [key ...] timeout —— 尾删
返回取出的元素或者 nil O(1)
返回结果相当于是一个pair(二元组)
一方面表示当前数据来自哪个 key
一方面表示取到的数据是什么
生产者—消费者模型 —— BlockingQueue
使用队列作为中间的“交易场所”(broker)
1.线程安全
2.队列为空,尝试出队列,产生阻塞,直到队列不空,阻塞解除
队列为满,尝试入队列,产生阻塞,直到队列不满,阻塞解除
Redis 的 list 也相当于 阻塞队列
线程安全 —— 单线程模型 阻塞 —— 只支持“队列为空”,不考虑“队列满”
显示设置阻塞时间,此处不会对 Redis 服务器造成太大影响
可以同时去尝试获取多个键,一旦有一个键对应的列表中可以弹出元素,命令立即返回
命令如果设置了多个键,会从左向右进行遍历,一旦有一个键对应的列表中可以弹出元素,命令立即返回
如果多个客户端同时对一个键进行 blpop ,最先执行的客户端会获得元素
编码方式
quecklist
相当于是 链表 和 压缩列表 的结合
整体还是一个列表,链表的每个节点,是一个压缩列表
每个压缩列表都不太大,同时再把多个压缩列表通过链表结构连起来
ziplist(压缩列表)
把数据按照更紧凑的形式进行表示。
节省空间,但是数个数多了,操作效率会下降
linkedlist(链表)
应用场景
消息队列
使用 lpush + brpop 组合实现 生产者-消费者 模型,在通过多个客户端保证负载均衡和高可用性
如果列表为空,生产出的下个元素只有一个消费者可以“抢到”元素
分频道的消息队列
如果频道为空,生产出的下个元素只有一个消费者可以“抢到”元素
多个频道,可以在某种数据发生异常时,不会对其他数据造影响(解耦合)
微博 TimeLine
每个用户都有属于自己的 TimeLine(微博列表)
当需要分页展示文章列表时,可以使用 list (list不仅有序,还支持按照索引范围获取元素)
1.)当前一页中的有多少数据是不确定的,可能会导致下面的循环比较大,从而出发多次 hgetall(多次网络请求)
pipeline (流水线\管道)把多个 Redis 命令合并成一次 网络请求进行通信,降低服务器与客户端的通信次数
2)分裂获取文章时,lrange 在列表两端表现比较好,获取列表中间的元素表现比较差,可以将列表进行拆分
相关文章:
list.
列表类型是用来存储多个有序的字符串,列表中的每个字符串称为元素(element),⼀个列表最多可以存储个元素 在 Redis 中,可以对列表两端插入(push)和弹出(pop),…...
202520读书笔记|《我要按自己喜欢的方式去生活》——面对可能到来的裁员,那就等正式通知吧
《我要按自己喜欢的方式去生活》作者宝夏夏,很赞的一本书,通透真实,不矫揉造作,直击内心。 因为第一个故事,裁员而进来的。早晨睡眼惺忪醒来,闺蜜半夜发来一大段话,大意是公司在缩减成本裁员&am…...
Linux 文件传输:系统数据交互的动脉
前言:sshd 在Linux系统中,文件传输常依赖于SSH协议(Secure Shell),而sshd(OpenSSH Daemon)是负责处理SSH连接的后台服务程序。通过sshd,用户可以在加密的通道中进行安全的远程登录、…...
Rust + WebAssembly 生产部署指南
1 最小可行部署(MVP) 前端打包wasm-pack build --target web --release # 生成 .wasm JS 包装器 npm run build / vite build / webpack … # 打包 HTML/CSS/JS 资源拷贝产物 到生产服务器的站点目录dist/ ├── index.html ├── pkg…...
git忽略已跟踪的文件/指定文件
在项目开发中,有时候我们并不需要git跟踪所有文件,而是需要忽略掉某些指定的文件或文件夹,怎么操作呢?我们分两种情况讨论: 1. 要忽略的文件之前并未被git跟踪 这种情况常用的方法是在项目的根目录下创建和编辑.gitig…...
基于Django实现的图书分析大屏系统项目
图书分析大屏展示系统项目大纲与启动教程 一、项目概述 图书分析大屏展示系统是一个基于Django框架开发的Web应用,主要用于图书数据的可视化分析与展示。该系统采用MVT(Model-View-Template)架构模式,结合MySQL数据库࿰…...
【OSCP-vulnhub】GoldenEye
目录 端口扫描 查找源代码 目录扫描 POP3邮件枚举 1.先枚举用户名 2.hydra爆破 3.nc连接 boris: natalya: 设置本地hosts文件 doak: 解析图片 exiftool for-007.jpg strings for-007.jpg 使用MSF去搜索内核版本 漏洞利用 ---…...
OpenAI发布GPT-4.1系列模型,主打编程能力提升
OpenAI在本周一推出了全新一代模型家族——GPT-4.1系列。没错,就是“4.1”,尽管OpenAI的命名方式已经让人有些摸不着头脑。 这一系列包括三个型号:GPT-4.1、GPT-4.1 mini和GPT-4.1 nano。据OpenAI介绍,这些模型在编程任务和指令遵…...
压缩包网页预览(zip-html-preview)
zip-html-preview 项目介绍 这是一个基于 Spring Boot 开发的在线 ZIP 文件预览工具,主要用于预览 ZIP 压缩包中的 HTML 文件及其相关资源。 主要功能 支持拖拽上传或点击选择多个 ZIP 文件自动解压并提取 ZIP 文件中的 HTML 文件在线预览 HTML 文件及其相关的 CSS、JavaSc…...
OpenCV 图形API(41)颜色空间转换----- BGR 图像转换为灰度图像函数BGR2Gray()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 将图像从BGR色彩空间转换为灰度。 B、G和R通道值的传统范围是0到255。结果的灰度颜色值计算为: dst ( I ) 0.114 ∗ src ( I ) . B…...
影视产业链中的律师角色以及合规风控要点
影视产业链中的律师角色以及合规风控要点 在影视娱乐业务中,律师服务贯穿项目全生命周期,涵盖创意开发、投z制作、发行传播、艺人管理及争议等多个领域 一、影视项目全流程合同法律事务 ✔️项目开发阶段 剧本合作:剧本委托创作、改编、版权…...
Java工具类——实体类列表写入excel
Java工具类——实体类列表写入excel /*** 将实体类 List 数据写入 Excel 文件* param dataList 实体类对象列表* param filePath Excel 文件路径* param sheetName Sheet 名称* param <T> 泛型类型* throws IOException 文件操作异常* throws IllegalAccessException 反…...
C++23 新预处理器指令详解:#elifdef、#elifndef 和 #warning
文章目录 1. #elifdef 和 #elifndef:更灵活的条件编译1.1 背景与动机1.2 语法与示例示例代码: 1.3 编译器支持 2. #warning:发出编译警告2.1 背景与动机2.2 语法与示例示例代码: 2.3 编译器支持 3. 总结 C23 标准引入了多项改进&a…...
书写API文档的最佳实践[特殊字符]
API文档对于API的可用性和成功至关重要。完善的API文档能显著提高开发者体验,加速采用,并培养强大的开发者社区。反之,糟糕的文档可能导致困惑、挫败感和错误,从而降低采用率。本文将探讨编写清晰、全面、开发者友好的API文档的高…...
【Maven】手动安装依赖到本地仓库
【Maven】手动安装依赖到本地仓库 【一】下载依赖【二】安装 JAR 文件到本地仓库【三】验证安装【四】在项目中使用该依赖【1】注意事项【2】额外提示 【一】下载依赖 登录到中央仓库下载依赖,中央仓库地址:https://mvnrepository.com/ 搜搜你的依赖的a…...
kali下maven 的安装与配置
1、下载 maven 安装包 wget https://dlcdn.apache.org/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.tar.gz 2、解压 apache-maven-3.9.4-bin.tar.gz tar -zxvf apache-maven-3.9.4-bin.tar.gz 找到文件解压到的位置,由于解压时我们没有指定路径&#x…...
list的模拟实现和反向迭代器的底层
1:list的模拟实现 1:链表的节点 对于list的模拟实现,我们需要先定义一个节点的类可以使用(class也可以使用struct) // List的节点类 template<class T> struct ListNode {ListNode(const T& val T()){_p…...
OpenHarmony - 小型系统内核(LiteOS-A)(七)
OpenHarmony - 小型系统内核(LiteOS-A)(七) 八、文件系统 适配新的文件系统 基本概念 所谓对接VFS层,其实就是指实现VFS层定义的若干接口函数,可根据文件系统的特点和需要适配其中部分接口。一般情况下&…...
四层板的时钟线设计:关键要点与实用策略
在电子电路设计领域,四层板凭借其出色的电气性能和合理的空间布局,广泛应用于各类电子产品中。而时钟线作为系统的 “心跳”,为整个电路提供同步信号,其设计质量直接关系到系统的稳定性、可靠性和性能表现。因此,深入探…...
【TypeScript类型系统解析:一次真实的类型检查修复经历】
TypeScript类型系统解析:一次真实的类型检查修复经历 在最近的管理系统开发过程中,我遇到了一个值得深入探讨的TypeScript类型问题。通过解决这个问题,我更深入地理解了TypeScript的类型系统工作原理,以及如何在Vue项目中正确处理…...
全视通无感护理巡视系统方案及产品,助力医院护士巡视病房到位
传统的护理工作中,护理巡视是一项重要且繁琐的任务。护士们需要根据不同的护理级别,定时对患者进行巡视,并手工填写巡视记录表,登记巡视时间、人员等信息。月末时,还需进行人工数据统计,这一过程不仅效率低…...
初识Redis · 命令、数据结构补充、协议
目录 前言: 数据结构补充 stream geospaital Hyperloglog bitmap bitfield 渐进式遍历命令等 认识Redis客户端及协议 前言: 在前文,我们总览一下,我们已经介绍了什么是Redis,Redis的应用场景是什么ÿ…...
DBA工作常见问题整理
MVCC机制: PostgreSQL的多版本并发控制(MVCC)是其核心特性之一,它允许数据库在高并发环境下保持高性能的同时提供事务隔离。 MVCC通过维护数据的多个版本实现: 读操作不阻塞写操作写操作不阻塞读操作避免使用锁实现并发控制 PostgreSQL的MVCC特点 写时…...
云转型(cloud transformation)——不仅仅是简单的基础设施迁移
李升伟 编译 云转型不仅仅是迁移基础设施,更是重塑企业运营、创新及价值交付的方式。它具有战略性、持续性,并影响着人员、流程和平台。 ☁️ 云转型涉及以下内容: 🔄 应用现代化——从单体架构转向微服务架构。 ⚙️ 运营自动…...
SpringBoot 定时任务
启用定时任务 首先确定需要启用定时任务的SpringBoot类,然后添加注解(EnableScheduling)以启用定时任务 package com.mt.visitorauth.anjian.service;import org.springframework.scheduling.annotation.EnableScheduling;EnableScheduli…...
常见的低代码策略整理
低代码策略通过简化开发流程、降低技术门槛、提升效率,帮助用户快速构建灵活可靠的应用。这些策略的核心优势体现在以下方面: 快速交付与降本增效 减少编码需求:通过可视化配置(如变量替换、表达式函数)替代传统编码…...
HFSS(李明洋)学习记录1
Hfss操作记录 HFSS—solution type:选择求解类型Modeler—units:设置hfss内部的基本单位可选mm或者in(英寸)设置端口激励—波端口:右键selection model/face 选中对应的表面之后;右键assign excitation/po…...
泛目录站群技术架构演进观察:2025年PHP+Java混合方案实战笔记
https://www.zhanqun.xin/ 在参与某跨国电商平台SEO优化项目时,我们团队对市面上主流站群系统进行了为期半年的技术评估。最终选择部署的2025版无极多功能泛目录站群程序,其技术实现路径与工程化设计思路颇具参考价值,现整理关键发现如下。 …...
sentinel安装部署及测试--实践
一、什么是 Sentinel? Sentinel 是阿里巴巴开源的一款用于微服务流量控制和系统防护的中间件。它的主要功能包括: **流量控制(Flow Control):**限制系统的 QPS 或线程数,防止因流量过大导致系统崩溃。 **…...
Yocto项目实战教程 · 第4章:4.1小节元数据
🔍 B站相应的视频教程: 📌 Yocto项目实战教程-第4章-4.1小节-元数据 记得三连,标为原始粉丝。 在嵌入式Linux系统构建中,Yocto项目凭借其高度模块化、可配置的特性成为主流工具。而其背后的关键支撑之一,便…...
应用镜像是什么?轻量应用服务器的镜像大全
应用镜像是轻量应用服务器专属的,镜像就是轻量应用服务器的装机盘,应用镜像在原有的纯净版操作系统上集成了应用程序,例如WordPress应用镜像、宝塔面板应用镜像、WooCommerce等应用,阿里云服务器网aliyunfuwuqi.com整理什么是轻量…...
关于Java集合中对象字段的不同排序实现方式
📊 关于Java集合中对象字段的不同排序实现方式 #Java集合 #排序算法 #Comparator #性能优化 一、排序基础:两种核心方式对比 方式Comparable接口Comparator接口实现位置目标类内部实现独立类或匿名内部类排序逻辑自然排序(固定规则…...
2000-2017年各省发电量数据
2000-2017年各省发电量数据 1、时间:2000-2017年 2、来源:能源年鉴、国家统计局 3、指标:行政区划代码、城市、年份、发电量 4、范围:31省 5、指标说明:发电量是指在特定时间内,发电设备(如…...
第二十二天 - 安全加固实践 - 漏洞扫描工具开发 - 练习:SSH暴力破解防护
前言 随着网络安全威胁日益严峻,掌握基础防护技能成为开发者必备能力。本文将从零开始,通过安全加固实践、漏洞扫描工具开发、SSH暴力破解防护三个维度,带您快速构建安全防御体系。所有示例均附带完整代码,建议边阅读边实践。 一…...
【AI】React Native中使用Zustand框架及自动生成选择器
引言 随着React Native在移动应用开发领域的广泛应用,高效的状态管理变得尤为重要。Zustand作为一个轻量级的状态管理库,提供了简洁而强大的API,特别适合于React Native应用开发。本报告将详细介绍如何在React Native项目中使用Zustand框架&…...
MySQL GTID集合运算函数总结
MySQL GTID 有一些运算函数可以帮助我们在运维工作中提高运维效率。 1 GTID内置函数 MySQL 包含GTID_SUBSET、GTID_SUBTRACT、WAIT_FOR_EXECUTED_GTID_SET、WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS 4个内置函数,用于GTID集合的基本运算。 1.1 GTID_SUBSET(set1,set2) …...
4.1.2 Redis协议与异步方式
文章目录 4.1.2 Redis协议与异步方式1. redis pipeline2. redis事务1. MULTI2. EXEC3. DISCARD4. WATCH 3. lua脚本1. lua基础语法2. Lua 脚本中访问 Redis 的方式3. Lua 脚本中的 KEYS 和 ARGV4、返回值5、错误处理EVALSHA 来代替 EVAL 4. ACID特性分析5. redis发布订阅1. 工作…...
ecovadis审核有什么原则?什么是ecovadis审核,有什么意义
EcoVadis审核概述 EcoVadis是一家全球知名的企业可持续发展评级机构,成立于2007年,旨在通过评估企业的环境(E)、社会(S)和治理(G)表现,帮助跨国公司管理供应链的可持续性…...
bitnet-b1.58-2B-4T和三进制
最近有个模型挺火啊现在都排进了HF排行榜的第四了 模型叫做microsoft/bitnet-b1.58-2B-4T 其实非常小的一个模型,只有2B,那这东西有多大意义呢? 它主要探索一个打法 也就是这篇论文 The era of 1-bit llms: All large language models ar…...
k8s报错kubelet.go:2461] “Error getting node“ err=“node \“k8s-master\“ not found“
问题 首先最初问题: [rootk8s-master ~]# kubectl get pods -owide --all-namespaces The connection to the server 192.168.2.129:6443 was refused - did you specify the right host or port?检查kubelet状态 查看kubelet status报找不到master节点 [rootk8…...
计算serise数据的唯一值数量
1. Series.unique() 功能:返回 Series 中所有唯一值的 数组(顺序按首次出现排列)。 返回值类型:numpy.ndarray(用户可能误认为是列表,但实际是 NumPy 数组)。 对 NaN 的处理:包含 …...
数组理论基础
什么是数组 在Java中,数组是一种数据结构,用来存储同一类型的多个元素。这些元素可以按照索引访问,方便对数据进行操作和管理。数组在编程中应用广泛,是一种基本且重要的数据结构。 数组的基本概念 1. 元素:数组中的…...
Linux操作系统--静态库和动态库的生成and四种解决加载找不到动态库的四种方法
目录 必要的知识储备: 生成静态库: 生成动态库: 解决加载找不到动态库的四种方法: 第一种:拷贝到系统默认的库路径 /usr/lib64/ 第二种:在系统默认的库路径/usr/lib64/下建立软链接 第三种࿱…...
安科瑞能源管理系统如何解决工业园区能源管理难,运维成本高的问题?
一、行业痛点:高能耗背后的“隐形炸弹 1. 能源管理粗放:水、电、气、冷热等多类型能源分散管理,人工抄表效率低,跑冒滴漏难追踪。 2. 电能质量隐患:变频设备引发谐波干扰,导致设备停机、电容器烧毁&#…...
大模型赋能工业制造革新:10个显效可落地的应用场景
在工业4.0的汹涌浪潮中,制造业正面临着前所未有的转型挑战。传统制造模式在效率、成本、质量等方面逐渐难以满足市场需求,企业急需借助新技术实现数字化转型,以提升自身竞争力。在此背景下,基于先进的数据分析技术、大模型、知识图…...
【android bluetooth 框架分析 02】【Module详解 4】【Btaa 模块介绍】
1. 背景 我们在上一篇文章中介绍 HciHal 模块时,有如下代码 // system/gd/hal/hci_hal_android_hidl.ccvoid ListDependencies(ModuleList* list) const {list->add<SnoopLogger>();if (common::init_flags::btaa_hci_is_enabled()) {list->add<ac…...
gitee新的仓库,Vscode创建新的分支详细步骤
第一步点击创建分支输入新分支的名字 第二步 第三步 第四步...
OpenHarmony - 小型系统内核(LiteOS-A)(五)
OpenHarmony - 小型系统内核(LiteOS-A)(五) 六、文件系统 虚拟文件系统 基本概念 VFS(Virtual File System)是文件系统的虚拟层,它不是一个实际的文件系统,而是一个异构文件系统之…...
Unity动态合批(Dynamic Batching)解析
什么是动态合批? 动态合批是Unity引擎的一项核心优化技术,用于减少绘制调用(Draw Calls)数量,提高游戏性能。它通过将多个使用相同材质的小型可移动物体的渲染操作合并为单个绘制调用,减轻CPU向GPU发送命令…...
【Python】迭代器(Iterator)vs 生成器(Generator)
迭代器(Iterator) vs 生成器(Generator) 1.迭代器(Iterator)1.1 是什么?1.2 示例1.3 适用场景 2.生成器(Generator)2.1 是什么?2.2 示例2.3 适用场景 3.迭代器…...