【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文件——>解析(不…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...

【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...

软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...

一些实用的chrome扩展0x01
简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序,无论是测试应用程序、搜寻漏洞还是收集情报,它们都能提升工作流程。 FoxyProxy 代理管理工具,此扩展简化了使用代理(如 Burp…...
js 设置3秒后执行
如何在JavaScript中延迟3秒执行操作 在JavaScript中,要设置一个操作在指定延迟后(例如3秒)执行,可以使用 setTimeout 函数。setTimeout 是JavaScript的核心计时器方法,它接受两个参数: 要执行的函数&…...