【Redis】 关于 Redis 有序集合类型

news2024/11/18 23:22:49

文章目录

  • 🍃前言
  • 🌴普通命令介绍
    • 🚩zadd
    • 🚩zcard
    • 🚩zcount
    • 🚩zrange
    • 🚩zrevrange
    • 🚩zrangebyscore
    • 🚩zpopmax
    • 🚩zpopmin
    • 🚩zrank
    • 🚩zrevrank
    • 🚩zscore
    • 🚩zrem
    • 🚩zremrangebyrank
    • 🚩zremrangebyscore
    • 🚩zincrby
  • 🎄阻塞版命令
    • 🚩bzpopmax
    • 🚩bzpopmin
  • 🎋集合间操作命令
    • 🚩zinterstore
    • 🚩zunionstore
  • 🌳内部编码
  • 🌲应用场景
  • ⭕总结

🍃前言

有序集合保留了集合不能有重复成员的特点,但与集合不同的是,有序集合中的每个元素都有⼀个唯⼀的浮点类型的分数(score)与之关联,着使得有序集合中的元素是可以维护有序性的,但这个有序不是⽤下标作为排序依据⽽是⽤这个分数。

有序集合提供了获取指定分数和元素范围查找、计算成员排名等功能,合理地利⽤有序集合,可以帮助我们在实际开发中解决很多问题

需要注意的是:

  • 有序集合中的元素是不能重复的,但分数允许重复。类⽐于⼀次考试之后,每个⼈⼀定有⼀个唯⼀的分数,但分数允许相同

列表、集合、有序集合三者的异同点如下表所示:

在这里插入图片描述

🌴普通命令介绍

🚩zadd

添加或者更新指定的元素以及关联的分数到 zset 中,分数应该符合 double类型,+inf/-inf 作为正负极限也是合法的。

语法:

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

ZADD 的相关选项:

  • XX:仅仅⽤于更新已经存在的元素,不会添加新元素。
  • NX:仅⽤于添加新元素,不会更新已经存在的元素。
  • CH:默认情况下,ZADD 返回的是本次添加的元素个数,但指定这个选项之后,就会还包含本次更新的元素的个数。
  • INCR:此时命令类似 ZINCRBY 的效果,将元素的分数加上指定的分数。此时只能指定⼀个元素和分数

时间复杂度:

  • O(log(N))

返回值:

  • 本次添加成功的元素个数。

在这里插入图片描述

🚩zcard

获取⼀个 zset 的基数(cardinality),即 zset 中的元素个数。

语法:

zcard key

时间复杂度:

  • O(1)

返回值:

  • zset内的元素个数。

在这里插入图片描述

🚩zcount

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

语法:

zcount key min max

时间复杂度:

  • O(log(N))

返回值:

  • 满⾜条件的元素列表个数

在这里插入图片描述

🚩zrange

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

语法:

zrange key start stop [WITHSCORES]

时间复杂度:

  • O(log(N)+M)

返回值:

  • 区间内的元素列表。

在这里插入图片描述

🚩zrevrange

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

需要注意的是:这个命令可能在 6.2.0 之后废弃,并且功能合并到 ZRANGE 中。

语法:

zrevrange key start stop [WITHSCORES]

时间复杂度:

  • O(log(N)+M)

返回值:

  • 区间内的元素列表。
    在这里插入图片描述

🚩zrangebyscore

返回分数在 min 和 max 之间的元素,默认情况下,min 和 max 都是包含的,可以通过 ( 排除。

这个命令可能在 6.2.0 之后废弃,并且功能合并到 ZRANGE 中。

语法:

zrangebyscore key min max [WITHSCORES]

时间复杂度:

  • O(log(N)+M)

返回值:

  • 区间内的元素列表。
    在这里插入图片描述

🚩zpopmax

删除并返回分数最⾼的 count 个元素

语法:

zpopmax key [count]

时间复杂度:

  • O(log(N) * M)

返回值:

  • 分数和元素列表

在这里插入图片描述

🚩zpopmin

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

语法:

zpopmin key [count]

时间复杂度:

  • O(log(N) * M)

返回值:

  • 分数和元素列表。

在这里插入图片描述

🚩zrank

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

语法:

zrank key member

时间复杂度:

  • O(log(N))

返回值:

  • 排名。

在这里插入图片描述

🚩zrevrank

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

zrevrank key member

时间复杂度:

  • O(log(N))

返回值:

  • 排名。

在这里插入图片描述

🚩zscore

返回指定元素的分数

语法:

zscore key member

时间复杂度:

  • O(1)

返回值:

  • 分数。

在这里插入图片描述

🚩zrem

删除指定的元素

语法:

zrem key member [member ...]

时间复杂度:

  • O(M*log(N))

返回值:

  • 本次操作删除的元素个数

在这里插入图片描述

🚩zremrangebyrank

按照排序,升序删除指定范围的元素,左闭右闭

语法:

zremrangebyrank key start stop

时间复杂度:

  • O(log(N)+M)

返回值:

  • 本次操作删除的元素个数

在这里插入图片描述

🚩zremrangebyscore

按照分数删除指定范围的元素,左闭右闭。

语法:

zremrangebyscore key min max

时间复杂度:

  • O(log(N)+M)

返回值:

  • 本次操作删除的元素个数。

在这里插入图片描述

🚩zincrby

为指定的元素的关联分数添加指定的分数值。

语法:

zincrby key increment member

时间复杂度:

  • O(log(N))

返回值:

  • 增加后元素的分数

在这里插入图片描述

🎄阻塞版命令

🚩bzpopmax

zpopmax 的阻塞版本

语法:

bzpopmax key [key ...] timeout

timeout的单位为秒

时间复杂度:

  • O(log(N))

返回值:

  • 元素列表。

在这里插入图片描述

🚩bzpopmin

zpopmin的阻塞版本

语法:

bzpopmin key [key ...] timeout

时间复杂度:

  • O(log(N))

返回值:

  • 元素列表。

🎋集合间操作命令

🚩zinterstore

求出给定有序集合中元素的交集并保存进⽬标有序集合中,在合并过程中以元素为单位进⾏合并,元素对应的分数按照不同的聚合⽅式和权重得到新的分数。

语法:

zinterstore destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE <SUM | MIN | MAX>]
  • weights 后面所表示的 weight 代表前面 key 所占有的权重
  • aggregate 表示按照什么方式进行聚合,有相加、最大值、最小值,先计算权重,后进行聚合

时间复杂度:

  • O(NK)+O(Mlog(M)), N是输⼊的有序集合中,最⼩的有序集合的元素个数; K是输⼊了⼏个有序集合;M是最终结果的有序集合的元素个数.

返回值:

  • ⽬标集合中的元素个数

在这里插入图片描述

🚩zunionstore

求出给定有序集合中元素的并集并保存进⽬标有序集合中,在合并过程中以元素为单位进⾏合并,元素对应的分数按照不同的聚合⽅式和权重得到新的分数。

语法:

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

时间复杂度:

  • O(N)+O(M*log(M)) N 是输⼊的有序集合总的元素个数; M 是最终结果的有序集合的元素
    个数.

返回值:

  • ⽬标集合中的元素个数

在这里插入图片描述

🌳内部编码

有序集合类型的内部编码有两种:

  • ziplist(压缩列表):当有序集合的元素个数⼩于 zset-max-ziplist-entries 配置(默认 128 个),同时每个元素的值都⼩于 zset-max-ziplist-value 配置(默认 64 字节)时,Redis 会⽤ ziplist 来作为有序集合的内部实现,ziplist 可以有效减少内存的使⽤。
  • skiplist(跳表):当 ziplist 条件不满⾜时,有序集合会使⽤ skiplist 作为内部实现,因为此时 ziplist 的操作效率会下降。

🌲应用场景

有序集合⽐较典型的使⽤场景就是排⾏榜系统。

例如常⻅的⽹站上的热榜信息,榜单的维度可能是多⽅⾯的:按照时间、按照阅读量、按照点赞量等。

⭕总结

关于《【Redis】 关于 Redis 有序集合类型》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

办公自动化-Python如何提取Word标题并保存到Excel中?

办公自动化-Python如何提取Word标题并保存到Excel中&#xff1f; 应用场景需求分析实现思路实现过程安装依赖库打开需求文件获取word中所有标题去除不需要的标题创建工作簿和工作表分割标题功能名称存入测试对象GN-TC需求标识符存入测试项标识存入需求标识符 完整源码实现效果学…

交换机的三层交换技术

现有pc1与pc2不在同一个网段之下&#xff0c;通过交换机相连接。 进人交换机1&#xff0c;创建两个vlan 10和vlan 20 &#xff0c;进入串口2设置串口模式为access&#xff0c;并且设置默认vlan为10.进入串口3设置串口模式为access&#xff0c;并且设置默认vlan为20. 进入串口1…

学习笔记——动态路由协议——OSPF(OSPF基本术语)

OSPF基本术语 1、链路状态(LS)与链路状态通告(LSA) 链路(LINK)&#xff1a;路由器上的一个接口。 状态(State)&#xff1a;描述接口以及其与邻居路由器之间的关系。 (1)链路状态(LS) OSPF是一种链路状态协议&#xff0c;所谓的链路状态&#xff0c;其实就是路由器的接口状态…

Java-数组内存解析

文章目录 1.内存的主要结构&#xff1a;栈、堆2.一维数组的内存解析3.二维数组的内存解析 1.内存的主要结构&#xff1a;栈、堆 2.一维数组的内存解析 举例1&#xff1a;基本使用 举例2&#xff1a;两个变量指向一个数组 3.二维数组的内存解析 举例1&#xff1a; 举例2&am…

Thingsboard规则链:Calculate Delta节点详解

在物联网(IoT)应用中&#xff0c;对设备数据的实时分析和处理是优化运营、预测维护的关键。Thingsboard作为一款功能强大的物联网平台&#xff0c;其规则引擎提供了丰富的节点来处理和分析数据流。其中&#xff0c;Calculate Delta节点是一个重要的工具&#xff0c;用于计算连续…

HAL库+LWIP+LAN8720+热插拔

定时任务中&#xff0c;查询LAN8720的状态寄存器 PHY_BSR 0x01&#xff0c;成功读取后&#xff0c;检查16位数据的BIT2&#xff0c;即可获取网线连接状态 uint32_t phyreg 0;if(HAL_ETH_ReadPHYRegister(&g_eth_handler, PHY_BSR, &phyreg) HAL_OK){if(((phyreg >…

电脑显示不出网络

你的电脑是否在开机后显示不出网络&#xff0c;或者有网络消失的现象&#xff1f;今天和大家分享我学到的一个办法&#xff0c;希望对大家有用。 分析出现这类现象的原因&#xff1a;可能是电脑网卡松动了&#xff0c;电脑中存在静电流。 解决办法&#xff1a;先将电脑关机&am…

20 VUE学习:插件

介绍 插件 (Plugins) 是一种能为 Vue 添加全局功能的工具代码。下面是如何安装一个插件的示例&#xff1a; import { createApp } from vueconst app createApp({})app.use(myPlugin, {/* 可选的选项 */ })一个插件可以是一个拥有 install() 方法的对象&#xff0c;也可以直接…

全文最详细的生产管理完整方案!那些让人头疼的生产管理难题及解决方法!

什么是生产管理系统&#xff1f;为何生产管理系统在企业管理中如此重要&#xff1f;生产管理系统的核心模块包括哪些&#xff1f;为何企业在生产管理系统中常常遭遇项目信息碎片化、任务分配和跟踪困难等痛点&#xff1f;又该如何针对生产管理痛点进行优化&#xff1f; 本文40…

【数据结构与算法 | 基础篇 | 队列篇】力扣102, 107

1. 力扣102 : 二叉树的层序遍历 (1). 题 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3]…

Nginx教程(持续更新中~)

浏览器优先查看host文件中的映射&#xff0c;如果host中没有就会从网上CDN找该域名对应的ip,但是目前使用的www.123.com是外卖假设的&#xff0c;CDN中并没有&#xff0c;所以就采用host中填写 第二种weight: 第三种 ip_hash: 第四种 fair: ​​​​​​

AWS 高防和阿里云高防深度对比

随着网络攻击的不断增加&#xff0c;企业对于网络安全的需求也越来越高。在这种情况下&#xff0c;高防护服务成为了企业网络安全的重要组成部分。AWS和阿里云作为全球领先的云计算服务提供商&#xff0c;都提供了高防护服务&#xff0c;但它们之间存在着一些差异。我们九河云一…

Idea java.lang.RuntimeException: java.lang.OutOfMemoryError: Java heap space 解决

咱们平时的开发过程中一定会进行本地调试&#xff0c;今天我也是安装了新的idea之后拉了一个比较大的项目进行本地调试的时候报错。报错信息如下&#xff1a; java: java.lang.OutOfMemoryError: Java heap space java.lang.RuntimeException: java.lang.OutOfMemoryError: Ja…

【火猫CS2】fantic取代C9参加YaLLa指南针

1、近日YaLLa Compass主办方宣布,由于Could9战队未能在截止日期前提交完整的参赛阵容,fantic战队将取代其参赛。该比赛将在阿联酋阿布扎比举行,总奖金40万美元。 最近一段时间Cloud9战队最近将electroNic转会至VP,又下放了HObbit和Perfecto,队伍因没有完整阵容已被迫退出EPL S1…

了解VS安全编译选项GS

缓冲区溢出攻击的基本原理就是溢出时覆盖了函数返回地址&#xff0c;之后就会去执行攻击者自己的函数&#xff1b; 针对缓冲区溢出时覆盖函数返回地址这一特征&#xff0c;微软在编译程序时使用了安全编译选项-GS&#xff1b; 目前版本的Visual Studio中默认启用了这个编译选项…

开源代码分享(31)-计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度

参考文献&#xff1a; [1]孙惠娟,刘昀,彭春华,等.计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度[J].电网技术,2021,45(09):3534-3545.DOI:10.13335/j.1000-3673.pst.2020.1720. 1.摘要 为了促进多能源互补及能源低碳化&#xff0c;提出了计及电转气协同的含碳捕集与垃…

CSS浮动详细教学(CSS从入门到精通学习第四天)

css第04天 一、其他样式 1、圆角边框 在 CSS3 中&#xff0c;新增了圆角边框样式&#xff0c;这样我们的盒子就可以变圆角了。 border-radius 属性用于设置元素的外边框圆角。 语法&#xff1a; border-radius:length; 参数值可以为数值或百分比的形式如果是正方形&…

Javaweb基础之Filter

大家好&#xff0c;这里是教授.F 引入&#xff1a; 为什么需要过滤器&#xff1f;&#xff1f;&#xff1f;我们在访问一个项目的时候&#xff0c;常常有很多页面&#xff0c;如果没有过滤器&#xff0c;则我们需要在用户访问一个页面的时候&#xff0c;都要进行一个校验&…

英飞凌 AURIX TriCore 单片机开发入门

文章目录 目的硬件准备AURIX™ Development StudioInfineon MemtoolAURIX™ iLLD Drivers总结 目的 英飞凌的32位 AURIX™ TriCore™ 系列单片机 经常用于汽车和工业领域。开发该系列单片机比较常用的开发环境有 HighTec 和 AURIX™ Development Studio 。本文将基于后者&…

SqlSession是什么?在MyBatis-Spring中有什么应用?

目录 一、SqlSession是什么 二、SqlSession在MyBatis中的应用 三、SqlSession在Spring中的应用 一、SqlSession是什么 SqlSession 是 MyBatis 框架中的一个核心概念&#xff0c;它代表与数据库的一次会话。MyBatis 是一个流行的 Java 持久层框架&#xff0c;用于简化数据库…