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

【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有序集合简介.

  1. 定义: Zset(有序集合)是Redis中的一种数据类型,它保留了集合不能有重复成员的特点,但与普通集合不同的是,Zset中的每个元素都与一个唯一的浮点类型的分数(score)相关联,这使得Zset中的元素可以维护有序性。

  2. 如何保证有序性: 每个元素都与一个分数相关联,分数用于确定元素在集合中的位置,且分数可以重复当分数相同时,元素会根据其字典顺序进行排序。

  3. **Zset在Redis中底层的编码方式:

    • 压缩列表(ziplist):一种紧凑的数据结构,通常用于存储元素较少、元素较小的有序集合。它以连续的内存块形式存储数据,每个节点可以包含一个或多个元素,且可以非常紧凑地存储整数和字符串等不同类型的元素。
    • 跳跃表(skiplist):一种基于链表的数据结构,通常用于存储元素较多、元素较大的有序集合。跳跃表通过多层链表实现快速查找,其插入、删除、查找的时间复杂度均为O(logN)。

二. 添加元素相关命令.

2.1 向有序集合中添加元素(zadd)

  1. 命令基本格式:

ZADD key [NX | XX] [GT | LT] [CH] [INCR] score member [score member ...]

  1. 解释参数含义:
  1. NX: 当number不存在的时候才会添加对应的score-number
  2. XX: 当number存在的时候才会修改对应的score-number
  3. GT: 当更新元素的时候, 只有当给定的score比已有的score大, 才会更新成功.
  4. LT: 当更新元素的时候, 只有当给定的score比已有的score小, 才会更新成功.
  5. CH: 将返回值从添加的新元素数修改为更改的元素总数(CH是changed的缩写)。更改的元素是添加的新元素和已经存在的元素,并为其更新了分数。因此,在命令行中指定的具有与过去相同分数的元素不会被计算在内。注意:通常ZADD的返回值只计算添加的新元素的数量
  6. INCR:当指定这个选项时,ZADD的行为类似于ZINCRBY。在这种模式下只能指定一个分数-元素对
  1. 时间复杂度:

O(log(N)),其中N是排序集合中元素的个数。

  1. 演示命令的使用:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

三. 查询元素相关操作.

3.1 查询有序集合中的元素个数( zcard zcount)

  1. 命令基本格式:

ZCARD key
ZCOUNT key min max

  1. 时间复杂度:

zcard O(1)
zcount O(log(N)) N是排序集合中元素的个数。

  1. 演示命令的使用:
    在这里插入图片描述

3.2 查询指定区间内的元素(zrange zrevrange zrangebyscore)

  1. 命令基本格式:

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的效果类似

  1. 时间复杂度:

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))。

  1. 演示命令的使用:
    在这里插入图片描述

3.3 查询有序集合中指定成员的排名(zrank zrevrank )

  1. 命令基本格式:

ZRANK key member [WITHSCORE] 查询有序集合中指定成员的排名
ZREVRANK key member [WITHSCORE] 查询有序集合中指定成员的逆序排名

  1. 时间复杂度:

O(log(N))

  1. 演示命令的使用:
    在这里插入图片描述

3.4 查询有序集合中指定成员的分数(zscore)

  1. 命令基本格式:

ZSCORE key member查询有序集合中指定成员的分数

  1. 时间复杂度:

O(1)

  1. 演示命令的使用:
    在这里插入图片描述

四. 删除元素相关操作.

4.1 删除并返回最大/最小的n个元素(zpopmax zpopmin)

  1. 命令基本格式:

ZPOPMAX key [count] 删除并返回最大的n个元素
ZPOPMIN key [count] 删除并返回最小的n个元素

  1. 时间复杂度:

都是 O(log(N)*M)其中N是排序集合中的元素个数,M是弹出的元素个数。

  1. 演示命令的使用:
    在这里插入图片描述

4.2 带有阻塞性质删除最大/小元素(bzpopmin bzpopmax)

  1. 命令基本格式:

BZPOPMAX key [key ...] timeout
BZPOPMIN key [key ...] timeout

  1. 时间复杂度:

O(log(N)) N是排序集合中元素的个数O(log(N)) N是排序集合中元素的个数

  1. 演示命令的使用:
    在这里插入图片描述
    在这里插入图片描述

4.3 删除有序集合中的n个元素( zrem zremrangebyrank zremrangebyscore)

  1. 命令基本格式:

ZREM key member [member ...] 删除有序集合中的n个元素
ZREMRANGEBYRANK key start stop 删除有序集合中指定排名范围内的成员
ZREMRANGEBYSCORE key min max 删除有序集合中指定分数范围内的成员

  1. 时间复杂度:

zrem O(M*log(N)),其中N是排序集合中元素的个数,M是要移除的元素的个数
zremrangebyrank O(log(N)+M),其中N是排序集合中的元素个数,M是操作移除的元素个数
zremrangebyscore O(log(N)+M),其中N是排序集合中的元素个数,M是操作移除的元素个数。

  1. 演示命令的使用:
    在这里插入图片描述

五. 集合运算相关操作.

5.1 求有序集合交集的操作(zinterstore)

  1. 命令基本格式:

ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE <SUM | MIN | MAX>]

  1. 解释参数含义:
    • destination 要把求交集的结果存储到哪个key对应的zset之中.
    • numkeys 描述了后续有几个key参与交集运算.
    • weight 每个key对应的权重
  2. 时间复杂度:

O(N*K)+O(M*log(M))最坏情况,其中N是最小的输入排序集,K是输入排序集的个数,M是结果排序集中元素的个数。

5.2 求集合并集的操作(zunionstore)

  1. 命令基本格式:

ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE <SUM | MIN | MAX>]

  1. 时间复杂度:

O(N)+O(M log(M)),其中N是输入排序集的大小之和,M是结果排序集的元素个数。

  1. 演示命令的使用:
    在这里插入图片描述

相关文章:

【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&#xff0c;filter&#xff0c;find&#xff0c;foreach的用法介绍 在 JavaScript 中&#xff0c;数组提供了一些常用的迭代方法&#xff0c;如 map、filter、find 和 forEach&#xff0c;这些方法允许你对数组中的每个元素进行操作&#xff0c;下面是它们的用法和区别…...

Linux 重置 root 密码

如果您在Linux系统中忘记了root密码&#xff0c;可以按照以下步骤重置&#xff1a; 重启系统。在启动时&#xff0c;当GRUB菜单出现时&#xff0c;选择要启动的内核版本&#xff0c;然后按 e 键编辑启动选项。找到以linux或linux16开头的行&#xff0c;它包含了启动内核的命令…...

【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的停车场管理系统

开题报告 随着城市化进程不断加快&#xff0c;汽车保有量持续增长&#xff0c;城市停车问题日益凸显&#xff0c;传统停车场管理手段面临着诸多挑战&#xff0c;诸如管理效率低、人工成本高、信息更新滞后、收费不透明等问题。鉴于此&#xff0c;基于 Web 的智能停车场管理系统…...

博睿数据首届“观测先锋 · 2024 可观测平台创新应用案例大赛”现已启动!

大赛报名火热进行中&#xff01; 在当今这个数字化、智能化的时代&#xff0c;可观测性技术已经成为企业IT架构中不可或缺的一部分。它能够帮助企业实时监控系统的运行状态&#xff0c;及时发现并解决潜在问题&#xff0c;从而确保业务的稳定性和连续性。博睿数据一体化智能可观…...

笔记:SOME/IP-SD报文中的TTL

问&#xff1a;SOME/IP-SD报文中有几个参数名字都叫的TTL&#xff0c;请问它们有什么不同&#xff1f; 答&#xff1a;在SOME/IP Service Discovery (SOME/IP-SD)协议中&#xff0c;确实有多个与TTL&#xff08;Time-To-Live&#xff09;相关的参数&#xff0c;但它们的含义不…...

9.存储过程安全性博客大纲(9/10)

存储过程安全性博客大纲 引言 在数据库系统中&#xff0c;存储过程是一种预先编写好的SQL代码集合&#xff0c;它被保存在数据库服务器上&#xff0c;可以通过指定的名称来调用执行。存储过程可以包含一系列的控制流语句&#xff0c;如IF条件语句、WHILE循环等&#xff0c;使…...

android 打包成aar

1 先建立的空白新工程&#xff08;不能有activity&#xff0c;直接建立No Activity的项目就行&#xff09; 2 建立新library 3 填写自己的内容 4 5 如果代码有红色提示的错误&#xff0c;会提示打包失败&#xff0c;修改红色的错误提示就行...

服务器和中转机在网络安全方面

服务器和中转机&#xff08;代理服务器&#xff09;在网络安全方面扮演着不同的角色&#xff0c;各自承担着保护网络资源和控制网络访问的重要职责。 它们在网络安全方面的主要作用&#xff1a; 服务器在网络安全中的角色 1.服务保护&#xff1a; 服务器通常运行着各种网络…...

解决“无法从 System.String 强制转换或转换为 Class 对象”错误

解决“无法从 System.String 强制转换或转换为 Class 对象”错误 在进行 API 自动化时&#xff0c;我必须反序列化响应以解析 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&#xff0c;原因是编辑的代码内容中…...

云原生之运维监控实践-使用taosKeeper与TDinsight实现对TDengine服务的监测告警

背景 如果没有监控&#xff0c;那么最好的情况是没有问题发生&#xff0c;最糟糕的情况则是问题发生了但没有被发现。——《Prometheus监控实战》 在10月10日收到了 TDengine 官方微信公众号的一条推送&#xff0c;摘要如下&#xff1a; 今天(2024年10月10日)我们非常高兴地宣布…...

前端js,vue系统使用iframe嵌入第三方系统的父子系统的通信

前端js,vue系统使用iframe嵌入第三方系统的父子系统的通信 1&#xff0c;父子系统之间的通信问题 父系统给子系统传值可通过postMessage方式进行通信,postMessage(“传递的数据”,url) 1.1 父系统给子系统的传值 let iframe document.getElementById(childFrame); let o1 {…...

树莓派刷入OpenWrt后扩容overlay的方法

问题&#xff1a; 128G的SD卡刷入openwrt后发现可用空间不足100M&#xff08;我用的squashfs固件&#xff0c;ext4也存在同样的问题&#xff0c;但能否用此方法需要自己尝试一下&#xff09;。 rootOpenWrt:~# df -h Filesystem Size Used Available Use%…...

【JS】Node.js读取execle表格中的数据

在Node.js中读取.xlsx格式的Excel文件&#xff0c;可以使用xlsx库。这个库非常流行且易于使用。下面是一个基本示例&#xff0c;展示如何使用xlsx库读取.xlsx文件中的数据。 首先&#xff0c;你需要安装xlsx库。你可以使用npm来安装&#xff1a; npm install xlsx然后&#x…...

怎么为pdf文件设置密码?几种PDF文件设置密码的方法推荐

怎么为pdf文件设置密码&#xff1f;设置PDF文件密码&#xff0c;正是应对这一挑战的有效手段之一。通过为PDF文件设置密码&#xff0c;我们能够为文档加上一道安全锁&#xff0c;确保只有掌握密码的用户才能打开和查看文件内容。这一措施不仅保护了文档的隐私性&#xff0c;还防…...

Rust : FnOnce、线程池与多策略执行

一、问题&#xff1a;mpsc如何发送各类不同的函数&#xff1f; 3个关键词&#xff1a;闭包、Box与FnOnce&#xff1b;请细品。 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中如何获得一个字符串占用多少字节?

浅浅记录 一个汉字占几个字节&#xff1f;JS中如何获得一个字符串占用多少字节&#xff1f; 一个汉字占几个字节&#xff1f; GBK编码&#xff1a;一个汉字、中文字符都是占2个字节&#xff0c;英文字符占1个字节 UTF-8编码&#xff1a;一个汉字、中文字符都是占3个字节&#…...

CommonJS 和 ES modules

CommonJS 和 ES modules (ESM) 是两种不同的模块系统&#xff0c;它们用于组织 JavaScript 代码&#xff0c;并允许不同文件之间共享代码。 CommonJS (CJS) CommonJS 是最早的 JavaScript 模块化规范之一&#xff0c;主要用于 Node.js 环境中。CommonJS 规定每个文件都是一个…...

计算机网络——CDN

空间编码例子&#xff1a;不是发送N个相同颜色值&#xff0c;而是仅发送2个值&#xff0c;颜色和重复个数 时间编码例子&#xff1a;不是发送i1帧的全部编码&#xff0c;而是仅发送帧i差别的地方 视频播放时&#xff0c;先下载manifest file文件——>解析&#xff08;不…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

20个超级好用的 CSS 动画库

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

9-Oracle 23 ai Vector Search 特性 知识准备

很多小伙伴是不是参加了 免费认证课程&#xff08;限时至2025/5/15&#xff09; Oracle AI Vector Search 1Z0-184-25考试&#xff0c;都顺利拿到certified了没。 各行各业的AI 大模型的到来&#xff0c;传统的数据库中的SQL还能不能打&#xff0c;结构化和非结构的话数据如何和…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...

Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解

文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一&#xff1a;HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二&#xff1a;Floyd 快慢指针法&#xff08;…...

算法—栈系列

一&#xff1a;删除字符串中的所有相邻重复项 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…...