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

Redis实战(3)-- 高级数据结构zset

有序集合(ZSET):

可以用作相关有序集合相对于哈希、列表、集合来说会有一点点陌生,但既然叫有序集合,那么它和集合必然有着联系,它保留了集合不能有重复成员的特性,但不同的是,有序集合中的元素可以排序。但是它和列表使用索引下标作为排序依据不同的是,它给每个元素设置一个分数( score)作为排序的依据。

有序集合中的元素不能重复,但是score可以重复,就和一个班里的同学学号不能重复,但是考试成绩可以相同。

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

使用场景

有序集合比较典型的使用场景就是排行榜系统。例如视频网站需要对用户上传的视频做排行榜,榜单的维度可能是多个方面的:按照时间、按照播放数量、按照获得的赞数。

补充】但是实际zrank进行排名,是异步定时执行的,不会进行每秒进行算一次,因为算一次消耗很大。

集合内操作命令
zadd添加成员

返回结果代表成功添加成员的个数

要注意:

zadd命令还有四个选项nx、xx、ch、incr 四个选项

nx: member必须不存在,才可以设置成功,用于添加。

xx: member必须存在,才可以设置成功,用于更新。

ch: 返回此次操作后,有序集合元素和分数发生变化的个数

incr: 对score做增加,相当于后面介绍的zincrby

zcard 计算成员个数

zscore 计算某个成员的分数常用

如果成员不存在则返回nil

zrank计算成员的排名常用

zrank是从分数从低到高返回排名

zrevrank反之

很明显,排名从0开始计算。

zrem 删除成员

允许一次删除多个成员。

返回结果为成功删除的个数。

zincrby 增加成员的分数

zrange和zrevrange返回指定排名范围的成员常用

有序集合是按照分值排名的,zrange是从低到高返回,zrevrange反之。如果加上

withscores选项,同时会返回成员的分数

zrangebyscore返回指定分数范围的成员

zrangebyscore key min max [withscores] [limit offset count]

zrevrangebyscore key max min [withscores][limit offset count]

其中zrangebyscore按照分数从低到高返回,zrevrangebyscore反之。例如下面操作从低到高返回200到221分的成员,withscores选项会同时返回每个成员的分数。

同时min和max还支持开区间(小括号)和闭区间(中括号),-inf和+inf分别代表无限小和无限大:

zcount 返回指定分数范围成员个数

zcount key min max

zremrangebyrank 按升序删除指定排名内的元素

zremrangebyrank key start end

zremrangebyscore 删除指定分数范围的成员

zremrangebyscore key min max

实际案例

zset计算平均分:

当存在多个集合时候,需要计算不同集合同名元素的平均分时候,使用以下操作:

//取一个新集合,将zset1和zset2的值存到zsetavg中,权重比例是对半开

Zinterstore zsetavg 2 zset1 zset2 weights 0.5 0.5

http://www.dtcms.com/a/302488.html

相关文章:

  • Linux应用程序架构与软件包管理
  • 【Linux】基本指令(2)
  • 未提交读的问题
  • 3. Socket 编程 TCP
  • 广播,数据库01 day43
  • JVM垃圾收集算法和垃圾收集器
  • 阿里云通义灵码深度解析:AI编程时代的技术革命与实践探索
  • 基于Hadoop3.3.4+Flink1.17.0+FlinkCDC3.0.0+Iceberg1.5.0整合,实现数仓实时同步mysql数据
  • 如何在 Ubuntu 24.04 或 22.04 Linux 上安装和使用 NoMachine
  • python导包机制-更优方式
  • 新华三H3CNE网络工程师认证—Telnet
  • 《 服务注册发现原理:从 Eureka 到 Nacos 的演进》
  • 7、Docker 常用命令大全
  • Python + Requests库爬取动态Ajax分页数据
  • Qt:盒子模型的理解
  • WebSocket双向通信——引入进行功能优化
  • opencv学习(轮廓检测)
  • ACL 访问控制列表全解析:从规则语法到实战配置
  • 旧物回收小程序:科技赋能,让旧物回收焕发生机
  • Avalonia的自定义边框窗口
  • React中为甚么强调props的不可变性
  • TMS320F2812PGFA TI:150MHz工业级DSP控制芯片,电机控制专用
  • 腾讯AI IDE
  • 天学网面试 —— 中级前端开发岗位
  • 动/静态库的原理及制作
  • 测试用例设计常用方法
  • MR-link-2:多效性顺式孟德尔随机化分析!
  • Windows 系统分辨率切换** 与 **Qt4 无边框窗口管理机制** 的交互
  • 2025年7月21–28日AI开发周报:新模型、新战略与开源亮点
  • 全新AI工具小程序源码 全开源