【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. 演示命令的使用:
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/449986.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

钴粉Co纳米微球100nm|CoNP/CoN2-C催化剂

钴粉Co纳米微球100nm|CoNP/CoN2-C催化剂 钴粉Co纳米微球100nm是一种具有独特物理和化学性质的纳米材料&#xff0c;因其高比表面积、优良的磁性和化学稳定性&#xff0c;在多个领域展现出广阔的应用前景。以下是关于钴粉Co纳米微球100nm的相关信息&#xff1a; 性质 高比表面…

ubuntu20.04安装gerrit

1、update 2、updategrale 一&#xff1a;安装前准备 配置管理gerrit的专属账号&#xff1a;(本次测试安装我用的ROOT) sudo adduser gerrit sudo usermod -a -G sudo gerrit //分配sudo 权限 sudo su gerrit java、git环境&#xff1a; sudo apt-get update sudo apt-g…

群晖前面加了雷池WAF,安装失败,然后无法识别出用户真实访问IP

有nas的相信对公网都不模式&#xff0c;在现在基础上传带宽能有100兆的时代&#xff0c;有公网代表着家里有一个小服务器&#xff0c;像百度网盘&#xff0c;优酷这种在线服务都能部署为私有化服务。但现在运营商几乎不可能提供公网ip&#xff0c;要么自己买个云服务器做内网穿…

多jdk版本环境下,jenkins系统设置需指定JAVA_HOME环境变量

一、背景 由于不同项目对jdk版本的要求不同&#xff0c;有些是要求jdk11&#xff0c;有些只需要jdk8即可。 而linux机器上安装jdk的方式又多种多样&#xff0c;最后导致jenkins打包到底使用的是哪个jdk&#xff0c;比较混乱。 1、java在哪 > whereis java java: /usr/bin/…

测试人生 | 双非院校,2年工作经验年薪近20万

本人本科毕业于双非院校&#xff0c;大学毕业之后就开始从事软件测试工作&#xff0c;有两年多的工作经验&#xff0c;工作当中学习的测试技能较少&#xff0c;比较多重复的工作内容&#xff0c;主要对软件进行功能测试、简单的接口测试及专项测试&#xff0c;自学的测试知识零…

【STL】模拟实现list

目录 list需要实现的接口 结点类的创建 迭代器类的实现 构造函数 运算符的重载 --运算符的重载 !运算符重载和运算符重载 operator* operator-> list的模拟实现 构造函数 拷贝构造函数 赋值运算符重载函数 析构函数 迭代器相关函数 begin和end front和back …

【超详细】TCP协议

TCP(Transmission Control Protocol 传输控制协议) 传输层协议有连接可靠传输面向字节流 为什么TCP是传输控制协议呢&#xff1f; 我们以前所看到的write接口&#xff0c;都是把用户级缓冲区的数据拷贝到发送缓冲区中&#xff0c;然后数据就由TCP自主决定了&#xff0c;所以…

crashrpt3 开源项目的Vs 2022 C++20及其以上的编译

1. 首先从github 下载源代码 crashrpt3 2. 用CMake Gui 编译成vs studio 工程文件 2.1 点击 config 按钮 2.2 依次点击 Generate 按钮、Open Project 按钮.之后vs 2022 会打开编译好的sln工程文件 3.全选解决方案里面的所有项目,设置C语言标准,我这里设置是最新C,即启用的是…

【文档智能】文本文字识别、公式识别、表格文字识别核心算法及思路及实践-DBNet、CRNN、TrOCR

前言 OCR技术作为文档智能解析链路中的核心组件之一&#xff0c;贯穿整个技术链路&#xff0c;包括&#xff1a;文字识别、表格文字识别、公式识别&#xff0c;参看下面这张架构图&#xff1a; 前期介绍了很多关于文档智能解析相关核心技术及思路&#xff0c;本着连载的目的&a…

IT监控平台可视化:多维度展示助力运维效率提升

在信息化时代&#xff0c;IT设备的稳定性与业务的连续性紧密相连&#xff0c;任何细微的故障都可能给企业带来巨大的损失。因此&#xff0c;IT运维团队面临着前所未有的挑战&#xff0c;他们需要迅速、准确地识别和解决问题&#xff0c;以确保业务的平稳运行。而IT监控平台的可…

应届生毕业找不到工作转行IT需要做好哪些准备呢?

前言 相信这是很多即将毕业的应届生们都非常关心的问题。在这里&#xff0c;我们将站在一个应届生毕业且对IT行业感兴趣的角度&#xff0c;来探讨一下这个问题。 首先&#xff0c;我们先来了解一下什么是应届生。应届生是指在学校毕业之后&#xff0c;能够在当年或者下一年度…

AIGC验证码如何对抗,AIGC VS AIGC

AI类型的验证码&#xff0c;当然使用AI对对抗&#xff0c;使用大量的样本叠加训练&#xff0c;我的生成如下: 如果可以生词大量词汇&#xff0c;那么准确率必然上升&#xff0c;有办法的可以讨论

大模型系列:RAG技术深度解析

文末有福利&#xff01; RAG 是2023年最流行的基于 LLM 的应用系统架构。有许多产品几乎完全建立在 RAG 之上&#xff0c;覆盖了结合网络搜索引擎和 LLM 的问答服务&#xff0c;到成千上万个数据聊天的应用程序。很多人将RAG和Agent 作为大模型应用的两种主流架构&#xff0c;…

CTFHUB技能树之HTTP协议——响应包源代码

开启靶场&#xff0c;打开链接&#xff1a; 是个贪吃蛇小游戏&#xff0c;看不出来有什么特别的地方 用burp抓包看看情况&#xff1a; 嗯&#xff1f;点击“开始”没有抓取到报文&#xff0c;先看看网页源代码是什么情况 居然直接给出flag了&#xff0c;不知道这题的意义何在 …

pip离线下载和安装第三方库

pip离线下载和安装第三方库 离线下载离线安装 离线下载 下载依赖库&#xff08;.whl文件&#xff09;&#xff0c;比如下载polars库&#xff0c;并指定重清华源下载&#xff0c;会自动下载依赖的库&#xff0c;并保存到当前目录中&#xff0c;下载命令如下&#xff1a; # 下载…

Intel 新独显 Arc Battlemage 或于10月29日揭晓

原文转载修改自&#xff08;更多互联网新闻/搞机小知识&#xff09;&#xff1a; Arc Battlemage或于10月29日揭晓 英特尔入局独显市场也好几年了&#xff0c;虽然开局声势和跑分都挺猛&#xff0c;但市场表现不会说谎&#xff0c;上季度趋近于0的市场份额就是答案……不过&am…

字符串及正则表达式

目录 字符串 字符串常用方法&#xff1a; 格格式化字符串的三种方式&#xff1a; 格式化字符串的详细格式&#xff1a; 字符串的编码&#xff1a; 字符串的解码&#xff1a; 数据的验证&#xff1a; 字符串拼接的几种方式&#xff1a; 字符串去重&#xff1a; 正则表达…

notepad++中实现代码整体缩进和退格

我 | 在这里 ⭐ 全栈开发攻城狮、全网10W粉丝、2022博客之星后端领域Top1、专家博主。 &#x1f393;擅长 指导毕设 | 论文指导 | 系统开发 | 毕业答辩 | 系统讲解等。已指导60位同学顺利毕业 ✈️个人公众号&#xff1a;乡下小哥编程。回复 Java全套视频教程 或 前端全套视频教…

【网易云音乐】--源代码分享

最近写了一个网易云音乐的音乐实现部分&#xff0c;是通过JavaScript和jQuery实现的&#xff0c;具体效果大家可以参照下面的视频 源代码分享 - git地址: 网易云音乐源代码 下面将着重讲解一下音乐实现部分 视频有点模糊&#xff0c;不好意思&#xff0c;在b站上添加视频的时候…

CSS进阶-布局(一)

1、文本溢出 <style>.d1 {width: 400px;height: 300px;background-color: antiquewhite;/* 超出部分色设置为可见&#xff0c;默认方式 *//* overflow: visible; *//* 超出部分使用滚动条 *//* overflow: scroll; *//* 如果内容未超出元素则正常显示&#xff0c;超出元素…