【redis】zset 类型:基本命令(上)

server/2025/3/15 15:19:48/

set 集合:

  1. 唯一
  2. 无序。(顺序不重要)孙行者、行者孙==>同一只猴

list

  1. 有序。(顺序很重要)孙行者、行者孙==>不同的猴

zset

  1. 有序。升序/降序

有序集合

排序的规则是什么?

  • zset 中的 member 引入了一个属性——分数(score),浮点类型
  • 每个 member 都会安排一个分数
    进行排序的时候,就是依照此处的分数大小,来进行升序/降序排序

image.png

  • 分数就是:“武力值

zset 中的 member 仍然要求是唯一的,score 可以重复
zset 主要还是用来存 member 的,score 只是辅助,进行排序

image.png

ZADD

使用 zadd 往有序集合中,添加元素


语法:

redis">ZADD key [NX | XX] [GT | CH] [INCR] score member [score member ...]ZRANGE key start end [withscores]
  • 时间复杂度: O ( l o g N ) O(logN) O(logN) N N N 为有序集合中的元素个数
  • 添加的时候,既要添加元素,又要添加分数。memberscore 称为是一个“pair
    • 不要把 memberscore 理解成“键值对”(key-value pair)。键值对中,是有明确的“角色区分”,谁是键,谁是值,是明确的,一定是根据键找到值

  • XX:只会更新已经存在的元素,不会添加新元素
  • NX:只能添加新元素,不会更新已经存在的元素
  • 都不加
    • 如果当前的 member 不存在,此时就会达到“添加新 member”的效果
    • 如果当前 member 已经存在,此时就会更新分数

  • LTless than):更新分数的时候,要是添加的分数比之前的分数小,此时就更新,否则就不更新
  • GTgreater than):和 LG 相反

  • CHchanged):针对返回值进行描述,影响到 zadd 的返回值
    • 本来 zadd 返回的是新增的元素个数
    • 加了 CH 之后,还会告诉我们修改后的元素个数

  • INCR:能够针对现有元素的分数进行运算

zset 内部实际上就是按照升序方式来排列的

新增

image.png

  • 查询结果降序image.png

修改

image.png|325

如果修改的分数,影响到了之前的顺序,救护级自动移动之前的位置,保证是降序排序

ZCARD

获取一个 zset 的计数,即元素个数


语法:

redis">ZCARD key
  • 返回值:zset 内的元素个数 |262

ZCOUNT

返回分数在 minmax 之间元素的个数,默认情况下 minmax 都是包含的,可以通过 () 排除


语法:

redis">ZCOUNT key min max
  • 时间复杂度: O ( l o g N ) O(logN) O(logN)

    • 先根据 min 找到对应的元素, l o g ( N ) log(N) log(N)
    • 再根据 max 找到对应的元素, l o g ( N ) log(N) log(N)
    • zset 内部,会记录每个元素当前的“排行”/“次序”,查询到元素,就直接知道了元素所在的“次序”,就可以直接把 max 对应的元素次序和 min 对应的元素次序,减法即可
  • 返回值:在区间的元素个数image.png|310

  • minmax 都可以写成浮点数(zset 分数本身就是浮点数)

    • 在浮点数中,存在两个特殊的数值
      • inf:无穷大
      • -inf:负无穷大

ZRANGE/ZREVRANGE

返回指定区间⾥的元素,分数按照升序/降序。带上 WITHSCORES 可以把分数也返回。


语法:

ZRANGE key start stop [withscores]ZREVRANGE key start stop [withscores]
  • 返回区间元素列表image.png|402

ZPOPMAX/ZPOPMIN

删除并返回分数最高/最低count 个元素


语法:

redis">ZPOPMAX key [count]
  • 返回值:分数和元素列表image.png|346

如果存在多个元素,分数相同,同时为最大值,zpopmax 删的时候,仍然只删除其中一个

BZPOPMAX/BZPOPMIN

这里的有序集合,也可以视为一个“优先级队列”,所以有的时候,也需要一个带有“阻塞功能”的优先级队列

每个 key 都是一个有序集合。阻塞也是在有序集合为空的时候触发阻塞,阻塞到有其他客户端插入元素

  • timeout 表示超时时间,单位是秒 s

语法:

redis">BZPOPMAX key [key ...] timeout

image.png

ZRANK/ZREVRANK

返回指定元素的排名,升序/降序


语法:

redis">ZRANK key memberZREVRANKE key member
  • 时间复杂度: O ( N ) O(N) O(N)
  • 排名从 0 开始 image.png

ZSCORE

返回指定元素的分数


语法:

redis">ZSCORE key member 
  • 返回值:分数image.png

http://www.ppmy.cn/server/175189.html

相关文章

【后端】【django】Django 自带的用户系统与 RBAC 机制

Django 自带的用户系统与 RBAC 机制 Django 自带的用户系统(django.contrib.auth)提供了 身份验证(Authentication) 和 权限管理(Authorization),能够快速实现 用户管理、权限控制、管理员后台…

AVL树的平衡算法的简化问题

AVL树是一种紧凑的二叉查找树。它的每个结点,都有左右子树高度相等,或者只相差1这样的特性。文章https://blog.csdn.net/aaasssdddd96/article/details/106291144给出了一个例子。 为了便于讨论,这里对AVL树的结点平衡情况定义2个名称&#…

【新人系列】Golang 入门(四):集合类型 - 上

✍ 个人博客:https://blog.csdn.net/Newin2020?typeblog 📝 专栏地址:https://blog.csdn.net/newin2020/category_12898955.html 📣 专栏定位:为 0 基础刚入门 Golang 的小伙伴提供详细的讲解,也欢迎大佬们…

2025 比较靠谱的上位机软件开发公司有哪些

上位机作为连接硬件设备与用户操作的核心载体,开发上位机软件则需兼顾高效性、稳定性、可扩展性及行业适配性。从技术能力、服务保障到行业经验,不同企业在细分领域展现出独特优势。带大家了解下2025年比较靠谱且有核心竞争力的上位机软件开发公司有哪些…

Gemini 2.0 Flash 原生图像生成

Google Gemini 2.0 Flash 全新开放原生图像生成功能,为开发者带来了多模态输入、增强推理能力和自然语言理解的全新体验。 多模态输入支持 支持文字与图片的联合输入(如:上传产品图输入「将背景换成雪山场景」)实现精准的语义理…

谷歌Gemini 2.0 Flash重磅更新:图文融合,初现AGI曙光

Gemini再进化,多模态能力惊艳 谷歌Gemini模型一直以其强大的多模态能力著称。它是一个“水桶型”模型,各项能力均衡,尤其在多模态理解方面处于全球领先地位。近日,谷歌宣布在Google AI Studio和Gemini API上开放Gemini 2.0 Flash的…

微软 System Center Configuration Manager(SCCM)的组件文件

微软 System Center Configuration Manager(SCCM) 或 Microsoft Endpoint Configuration Manager(MECM) 的组件文件,属于企业级设备管理工具的一部分。以下是具体说明: C:\Windows\CCM\smsswd.exe C:\Windows\CCM\tsmanager.exe smsswd.exe 和 tsmanager.exe 是 Micros…

Python网络爬虫之BeautifulSoup库的使用流程和方法

在使用BeautifulSoup解析HTML或XML数据时,需要掌握其基本使用流程和常见方法。本节将详细介绍如何使用BeautifulSoup解析网页,包括加载HTML数据、查找元素、提取文本、获取属性以及遍历HTML结构,帮助读者掌握网页数据解析的核心技能。 1. 使用BeautifulSoup解析HTML数据 在…