【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文件——>解析(不…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...

20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...

9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...

Python训练营-Day26-函数专题1:函数定义与参数
题目1:计算圆的面积 任务: 编写一个名为 calculate_circle_area 的函数,该函数接收圆的半径 radius 作为参数,并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求:函数接收一个位置参数 radi…...
Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解
文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一:HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二:Floyd 快慢指针法(…...

算法—栈系列
一:删除字符串中的所有相邻重复项 class Solution { public:string removeDuplicates(string s) {stack<char> st;for(int i 0; i < s.size(); i){char target s[i];if(!st.empty() && target st.top())st.pop();elsest.push(s[i]);}string ret…...