【Redis】Zset类型常用命令
文章目录
- 一. Zset有序集合简介.
- 二. 添加元素相关命令.
- 2.1 向有序集合中添加元素(==zadd==)
- 三. 查询元素相关操作.
- 3.1 查询有序集合中的元素个数( ==zcard zcount==)
- 3.2 查询指定区间内的元素(==zrange zrevrange zrangebyscore==)
- 3.3 查询有序集合中指定成员的排名(==zrank zrevrank== )
- 3.4 查询有序集合中指定成员的分数(==zscore==)
- 四. 删除元素相关操作.
- 4.1 删除并返回最大/最小的n个元素(==zpopmax zpopmin==)
- 4.2 带有阻塞性质删除最大/小元素(==bzpopmin bzpopmax==)
- 4.3 删除有序集合中的n个元素( ==zrem zremrangebyrank zremrangebyscore==)
- 五. 集合运算相关操作.
- 5.1 求有序集合交集的操作(==zinterstore==)
- 5.2 求集合并集的操作(==zunionstore==)
一. Zset有序集合简介.
-
定义: Zset(有序集合)是Redis中的一种数据类型,它保留了集合不能有重复成员的特点,但与普通集合不同的是,Zset中的每个元素都与一个唯一的浮点类型的分数(score)相关联,这使得Zset中的元素可以维护有序性。
-
如何保证有序性: 每个元素都与一个分数相关联,分数用于确定元素在集合中的位置,且分数可以重复。当分数相同时,元素会根据其字典顺序进行排序。
-
**Zset在Redis中底层的编码方式:
- 压缩列表(ziplist):一种紧凑的数据结构,通常用于存储元素较少、元素较小的有序集合。它以连续的内存块形式存储数据,每个节点可以包含一个或多个元素,且可以非常紧凑地存储整数和字符串等不同类型的元素。
- 跳跃表(skiplist):一种基于链表的数据结构,通常用于存储元素较多、元素较大的有序集合。跳跃表通过多层链表实现快速查找,其插入、删除、查找的时间复杂度均为O(logN)。
二. 添加元素相关命令.
2.1 向有序集合中添加元素(zadd)
- 命令基本格式:
ZADD key [NX | XX] [GT | LT] [CH] [INCR] score member [score member ...]
- 解释参数含义:
- NX: 当number不存在的时候才会添加对应的score-number
- XX: 当number存在的时候才会修改对应的score-number
- GT: 当更新元素的时候, 只有当给定的score比已有的score大, 才会更新成功.
- LT: 当更新元素的时候, 只有当给定的score比已有的score小, 才会更新成功.
- CH: 将返回值从添加的新元素数修改为更改的元素总数(CH是changed的缩写)。更改的元素是添加的新元素和已经存在的元素,并为其更新了分数。因此,在命令行中指定的具有与过去相同分数的元素不会被计算在内。注意:通常ZADD的返回值只计算添加的新元素的数量
- INCR:当指定这个选项时,ZADD的行为类似于ZINCRBY。在这种模式下只能指定一个分数-元素对
- 时间复杂度:
O(log(N)),其中N是排序集合中元素的个数。
- 演示命令的使用:



三. 查询元素相关操作.
3.1 查询有序集合中的元素个数( zcard zcount)
- 命令基本格式:
ZCARD key
ZCOUNT key min max
- 时间复杂度:
zcard O(1)
zcount O(log(N)) N是排序集合中元素的个数。
- 演示命令的使用:

3.2 查询指定区间内的元素(zrange zrevrange zrangebyscore)
- 命令基本格式:
ZRANGE key start stop [BYSCORE | BYLEX] [REV] [LIMIT offset count] [WITHSCORES]获取指定下标范围内的元素
ZREVRANGE key start stop [WITHSCORES]逆序获取指定下标范围内的元素
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]按照分数来找元素,和zcount的效果类似
- 时间复杂度:
zrange O(log(N)+M),其中N是排序集合中的元素个数,M是返回的元素个数。
zrevrange O(log(N)+M),其中N是排序集合中的元素个数,M是返回的元素个数。
zrangebyscore O(log(N)+M)其中N是排序集合中的元素个数M是返回的元素个数。如果M是常数(例如总是要求前10个元素有LIMIT),你可以认为它是O(log(N))。
- 演示命令的使用:

3.3 查询有序集合中指定成员的排名(zrank zrevrank )
- 命令基本格式:
ZRANK key member [WITHSCORE]查询有序集合中指定成员的排名
ZREVRANK key member [WITHSCORE]查询有序集合中指定成员的逆序排名
- 时间复杂度:
O(log(N))
- 演示命令的使用:

3.4 查询有序集合中指定成员的分数(zscore)
- 命令基本格式:
ZSCORE key member查询有序集合中指定成员的分数
- 时间复杂度:
O(1)
- 演示命令的使用:

四. 删除元素相关操作.
4.1 删除并返回最大/最小的n个元素(zpopmax zpopmin)
- 命令基本格式:
ZPOPMAX key [count]删除并返回最大的n个元素
ZPOPMIN key [count]删除并返回最小的n个元素
- 时间复杂度:
都是 O(log(N)*M)其中N是排序集合中的元素个数,M是弹出的元素个数。
- 演示命令的使用:

4.2 带有阻塞性质删除最大/小元素(bzpopmin bzpopmax)
- 命令基本格式:
BZPOPMAX key [key ...] timeout
BZPOPMIN key [key ...] timeout
- 时间复杂度:
O(log(N))N是排序集合中元素的个数O(log(N)) N是排序集合中元素的个数
- 演示命令的使用:


4.3 删除有序集合中的n个元素( zrem zremrangebyrank zremrangebyscore)
- 命令基本格式:
ZREM key member [member ...]删除有序集合中的n个元素
ZREMRANGEBYRANK key start stop删除有序集合中指定排名范围内的成员
ZREMRANGEBYSCORE key min max删除有序集合中指定分数范围内的成员
- 时间复杂度:
zrem
O(M*log(N)),其中N是排序集合中元素的个数,M是要移除的元素的个数
zremrangebyrankO(log(N)+M),其中N是排序集合中的元素个数,M是操作移除的元素个数
zremrangebyscoreO(log(N)+M),其中N是排序集合中的元素个数,M是操作移除的元素个数。
- 演示命令的使用:

五. 集合运算相关操作.
5.1 求有序集合交集的操作(zinterstore)
- 命令基本格式:
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE <SUM | MIN | MAX>]
- 解释参数含义:
- destination 要把求交集的结果存储到哪个key对应的zset之中.
- numkeys 描述了后续有几个key参与交集运算.
- weight 每个key对应的权重
- 时间复杂度:
O(N*K)+O(M*log(M))最坏情况,其中N是最小的输入排序集,K是输入排序集的个数,M是结果排序集中元素的个数。
5.2 求集合并集的操作(zunionstore)
- 命令基本格式:
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE <SUM | MIN | MAX>]
- 时间复杂度:
O(N)+O(M log(M)),其中N是输入排序集的大小之和,M是结果排序集的元素个数。
- 演示命令的使用:

相关文章:
【Redis】Zset类型常用命令
文章目录 一. Zset有序集合简介.二. 添加元素相关命令.2.1 向有序集合中添加元素(zadd) 三. 查询元素相关操作.3.1 查询有序集合中的元素个数( zcard zcount)3.2 查询指定区间内的元素(zrange zrevrange zrangebyscore)3.3 查询有序集合中指定成员的排名(zrank zrevrank )3.4 查…...
js中map,filter,find,foreach的用法介绍
js中map,filter,find,foreach的用法介绍 在 JavaScript 中,数组提供了一些常用的迭代方法,如 map、filter、find 和 forEach,这些方法允许你对数组中的每个元素进行操作,下面是它们的用法和区别…...
Linux 重置 root 密码
如果您在Linux系统中忘记了root密码,可以按照以下步骤重置: 重启系统。在启动时,当GRUB菜单出现时,选择要启动的内核版本,然后按 e 键编辑启动选项。找到以linux或linux16开头的行,它包含了启动内核的命令…...
【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的停车场管理系统
开题报告 随着城市化进程不断加快,汽车保有量持续增长,城市停车问题日益凸显,传统停车场管理手段面临着诸多挑战,诸如管理效率低、人工成本高、信息更新滞后、收费不透明等问题。鉴于此,基于 Web 的智能停车场管理系统…...
博睿数据首届“观测先锋 · 2024 可观测平台创新应用案例大赛”现已启动!
大赛报名火热进行中! 在当今这个数字化、智能化的时代,可观测性技术已经成为企业IT架构中不可或缺的一部分。它能够帮助企业实时监控系统的运行状态,及时发现并解决潜在问题,从而确保业务的稳定性和连续性。博睿数据一体化智能可观…...
笔记:SOME/IP-SD报文中的TTL
问:SOME/IP-SD报文中有几个参数名字都叫的TTL,请问它们有什么不同? 答:在SOME/IP Service Discovery (SOME/IP-SD)协议中,确实有多个与TTL(Time-To-Live)相关的参数,但它们的含义不…...
9.存储过程安全性博客大纲(9/10)
存储过程安全性博客大纲 引言 在数据库系统中,存储过程是一种预先编写好的SQL代码集合,它被保存在数据库服务器上,可以通过指定的名称来调用执行。存储过程可以包含一系列的控制流语句,如IF条件语句、WHILE循环等,使…...
android 打包成aar
1 先建立的空白新工程(不能有activity,直接建立No Activity的项目就行) 2 建立新library 3 填写自己的内容 4 5 如果代码有红色提示的错误,会提示打包失败,修改红色的错误提示就行...
服务器和中转机在网络安全方面
服务器和中转机(代理服务器)在网络安全方面扮演着不同的角色,各自承担着保护网络资源和控制网络访问的重要职责。 它们在网络安全方面的主要作用: 服务器在网络安全中的角色 1.服务保护: 服务器通常运行着各种网络…...
解决“无法从 System.String 强制转换或转换为 Class 对象”错误
解决“无法从 System.String 强制转换或转换为 Class 对象”错误 在进行 API 自动化时,我必须反序列化响应以解析 API 响应数据。我们使用 Newtonsoft.Json NuGet 来实现这一点。 我在反序列化过程中遇到以下错误 - Newtonsoft.Json.JsonSerializationExceptionH…...
Git:LF will be replaced by CRLF、pytest PermissionError以及Git应用中的一些问题解决及一些使用技巧
一、Git:LF will be replaced by CRLF和pytest: --cov NTERNALERROR PermissionError 1. git warning: LF will be replaced by CRLF in ***file 偶然git add在进行代码提交的时候碰到警告warning: LF will be replaced by CRLF in ***file,原因是编辑的代码内容中…...
云原生之运维监控实践-使用taosKeeper与TDinsight实现对TDengine服务的监测告警
背景 如果没有监控,那么最好的情况是没有问题发生,最糟糕的情况则是问题发生了但没有被发现。——《Prometheus监控实战》 在10月10日收到了 TDengine 官方微信公众号的一条推送,摘要如下: 今天(2024年10月10日)我们非常高兴地宣布…...
前端js,vue系统使用iframe嵌入第三方系统的父子系统的通信
前端js,vue系统使用iframe嵌入第三方系统的父子系统的通信 1,父子系统之间的通信问题 父系统给子系统传值可通过postMessage方式进行通信,postMessage(“传递的数据”,url) 1.1 父系统给子系统的传值 let iframe document.getElementById(childFrame); let o1 {…...
树莓派刷入OpenWrt后扩容overlay的方法
问题: 128G的SD卡刷入openwrt后发现可用空间不足100M(我用的squashfs固件,ext4也存在同样的问题,但能否用此方法需要自己尝试一下)。 rootOpenWrt:~# df -h Filesystem Size Used Available Use%…...
【JS】Node.js读取execle表格中的数据
在Node.js中读取.xlsx格式的Excel文件,可以使用xlsx库。这个库非常流行且易于使用。下面是一个基本示例,展示如何使用xlsx库读取.xlsx文件中的数据。 首先,你需要安装xlsx库。你可以使用npm来安装: npm install xlsx然后&#x…...
怎么为pdf文件设置密码?几种PDF文件设置密码的方法推荐
怎么为pdf文件设置密码?设置PDF文件密码,正是应对这一挑战的有效手段之一。通过为PDF文件设置密码,我们能够为文档加上一道安全锁,确保只有掌握密码的用户才能打开和查看文件内容。这一措施不仅保护了文档的隐私性,还防…...
Rust : FnOnce、线程池与多策略执行
一、问题:mpsc如何发送各类不同的函数? 3个关键词:闭包、Box与FnOnce;请细品。 use std::sync::{mpsc,Arc,Mutex}; use std::thread; fn process<F>(old:f32,name:String,f:F) where F: FnOnce(f32,String) {f(old,name);…...
一个汉字占几个字节、JS中如何获得一个字符串占用多少字节?
浅浅记录 一个汉字占几个字节?JS中如何获得一个字符串占用多少字节? 一个汉字占几个字节? GBK编码:一个汉字、中文字符都是占2个字节,英文字符占1个字节 UTF-8编码:一个汉字、中文字符都是占3个字节&#…...
CommonJS 和 ES modules
CommonJS 和 ES modules (ESM) 是两种不同的模块系统,它们用于组织 JavaScript 代码,并允许不同文件之间共享代码。 CommonJS (CJS) CommonJS 是最早的 JavaScript 模块化规范之一,主要用于 Node.js 环境中。CommonJS 规定每个文件都是一个…...
计算机网络——CDN
空间编码例子:不是发送N个相同颜色值,而是仅发送2个值,颜色和重复个数 时间编码例子:不是发送i1帧的全部编码,而是仅发送帧i差别的地方 视频播放时,先下载manifest file文件——>解析(不…...
避开Unity动态合批的坑:为什么你的Dynamic Batching不生效?
深度剖析Unity动态合批失效的六大技术陷阱与实战解决方案 当你在Unity项目中精心设计了数百个低多边形道具,却发现性能面板中的Draw Calls居高不下时,动态合批(Dynamic Batching)很可能正在暗中失效。本文将揭示那些官方文档未曾详…...
ShapeOfView贡献指南:如何为开源项目添加新的自定义形状
ShapeOfView贡献指南:如何为开源项目添加新的自定义形状 【免费下载链接】ShapeOfView Give a custom shape to any android view, Material Design 2 ready 项目地址: https://gitcode.com/gh_mirrors/sh/ShapeOfView ShapeOfView是一款强大的Android开源库…...
如何高效使用NumPy结构化数组:处理复杂数据格式的终极指南
如何高效使用NumPy结构化数组:处理复杂数据格式的终极指南 【免费下载链接】numpy numpy/numpy: NumPy 是一个用于 Python 的数值计算库,提供了多种数学函数和工具,可以用于数值计算和科学计算,支持多种数学函数和工具,…...
Webflux fromXXX对比
Mono.fromFuture和Mono.fromSupplier 刚开始尝试使用 Spring WebFlux 的时候,很多人都会使用 Mono.fromFuture() 将异步请求转成 Mono 对象,或者 Mono.fromSupplier() 将请求转成 MOno 对象,这两种方式在响应式编程 中都是不建议的࿰…...
OpenCV图像预处理失效全解析,深度解读光照不均、反光伪影、亚像素抖动下的鲁棒代码实现
第一章:OpenCV图像预处理失效的典型工业场景综述在工业视觉检测系统中,OpenCV常被用作图像预处理的核心工具,但其默认参数与理想假设在真实产线环境中频繁失效。光照剧烈波动、镜头污损、金属反光、高速运动拖影以及低信噪比成像等物理约束&a…...
使用 HashMap 优化嵌套循环:Java 对象数组转换
本文旨在提供使用 HashMap 优化 Java 嵌套循环的有效方法,特别是当循环涉及对象数组并进行相等检查时。通过将内部循环转换为 HashMap 查询可以显著降低时间复杂性,提高代码性能。本文将提供详细的步骤和示例代码,以帮助读者理解和应用此优化…...
等保测评必看!用组策略批量关闭445/139端口(域环境适用版)
企业域环境下批量关闭高危端口的组策略实战指南 在等保测评和日常安全运维中,445、139、135等端口因其历史漏洞和潜在风险,常被列为必须管控的高危端口。对于拥有数百甚至上千台终端的中大型企业来说,逐台手动配置不仅效率低下,更…...
Python异步I/O终极调优手册(含strace+py-spy+asyncio debug mode三重追踪链路图)
第一章:Python异步I/O性能瓶颈的本质洞察Python的async/await语法虽大幅简化了异步编程模型,但其底层性能瓶颈并非源于语法糖本身,而根植于事件循环调度机制、GIL对CPU密集型任务的制约,以及I/O等待与协程切换之间的隐式开销。事件…...
时间切片:24小时
基于双层优化的电动汽车优化调度研究 代码主要做的是一个双层的电动汽车充放电行为优化问题,具体来讲,输电网上层优化将电动汽车与发电机、基本负荷协调,同时考虑风力发电,从而在时域内优化电动汽车的负荷周期。 然后,…...
Llama-3.2-3B效果体验:Ollama简单操作,产出专业级文案
Llama-3.2-3B效果体验:Ollama简单操作,产出专业级文案 1. 模型概览:小而精的文本生成专家 Llama-3.2-3B是Meta最新推出的轻量级语言模型,在3B参数规模下实现了接近大模型的文本生成质量。经过指令微调优化后,它在多语…...
