初始redis:Zset有序集合

Set作为集合,有两个特点:唯一且无序。

Zset是有序集合,在保证唯一的情况下,是根据什么来排序的呢?排序的规则是什么?

Zset中的member引入了一个属性,分数(score),浮点类型,每个member都会安排一个分数,进行排序的时候,就是按照此处的分数大小来进行升序、降序的操作。

目录

普通命令

ZADD

ZRANGE

ZCARD

ZCOUNT

ZREVRANGE

ZRANGEBYSCORE

ZPOPMAX  ZPOPMIN

BZPOPMAX  BZPOPMAX

ZRANK   ZREVRANK

ZSCORE

ZREM

ZREMRANGEBYRANK

ZREMRANGEBYRANK

ZINCRBY

集合间操作

交集 ZINTERSTORE

并集 ZUNIONSTOR

Zset应用场景


普通命令

ZADD

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

添加元素的时候,既要添加元素又要添加分数。

不加 XX | NX  的时候,如果当前member不存在,此时就会达到“添加新member”的效果,如果当前member已经存在,此时就会更新分数。

如果元素有相同的分数可以按照元素自身字符串的字典数来排列。

Zset内部是按照升序来排列的。

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

ZRANGE

查询操作,后面加上withscores,可以查询到ZADD添加的分数。

ZCARD

获取一个Zset的基数,即Zset中的元素个数。

ZCOUNT

返回分数在某个区间的元素个数。

ZCOUNT key min max

可以遍历一遍后,就可以知道min和max,但是如果进行遍历,时间复杂度就不是O(logN)了。

实际上,Zset内部会记录每个元素当前的排行(次序),查询到元素就能知道元素所在的次序。

ZREVRANGE

ZRANGE是按照升序来排序,ZREVRANGE则是按照降序来排序。

ZRANGEBYSCORE

按照分数来找元素,通过min max来划分区间。

ZPOPMAX key [count]

ZPOPMAX  ZPOPMIN

删除并返回分数最高(低)的count个元素。

如果存在多个元素分数相同,并且同时为最大(小)值,此时删除的时候仍然只删除一个。

如果分数相同会按照membe字符串的字典序决定先后。

BZPOPMAX  BZPOPMAX

BZPOPMAX key [key ...] timeout

这个命令就是ZPOPMAX的阻塞版本,timeout表示超时时间,表示最多阻塞多久。

ZRANK   ZREVRANK

查询元素的下标(排名)。

 ZRANK得到的下标,是从前往后算的(升序)。ZREVRANK则相反,按照降序。

ZSCORE

查询指定元素的分数。时间复杂度为O(1)。

ZSCORE key member

ZREM

删除指定元素。

ZREM key member [member ...]

ZREMRANGEBYRANK

ZREMRANGEBYRANK key start stop

对于start和stop区间下标的进行元素删除。

ZREMRANGEBYRANK

ZREMRANGEBYSCORE key min max

对于min和max之间的分数,进行元素删除。

ZINCRBY

ZINCRBY key increment member

ZINCRBY命令会将有序集合中指定成员的分数增加指定的值。

如果成员不存在,它会先创建该成员,然后增加分数。

如果指定的分数增加后为负数,则分数会被设置为 0 。

集合间操作

交集 ZINTERSTORE

ZINTERSTORE 是 Redis 用于合并两个或多个有序集合的命令,并存储结果到一个新的有序集合中。

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

参数

  • destination:存储结果的有序集合的名称。
  • numkeys:参与合并的有序集合的数量。
  • key [key ...]:要合并的有序集合的名称列表。
  • WEIGHTS weight [weight ...]:(可选)每个有序集合的权重列表,用于调整每个集合成员在计算结果时的权重。
  • AGGREGATE:(可选)指定如何合并分数,可以是 SUM(默认)、MIN 或 MAX

可以看到,添加了权重的值,会取权重乘以原集合的值,再取sum添加到新的集合中去。

并集 ZUNIONSTOR

ZUNIONSTOR用法和ZINTERSTORE基本一致。

Zset应用场景

1.微博热搜

2.游戏天梯排行

3.成绩排行

对于zset,很多排行榜的场景,可以用到交集和并集,把一些成绩合并起来,并且通过动态排序来完成。

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

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

相关文章

立式报工台助力MES系统打造智能硬件解决方案

信息化与自动化的深度结合,使得企业在生产效率、质量控制以及资源管理等方面得以大幅提升。制造执行系统MES作为连接企业管理层与生产现场的重要桥梁,正在愈发得到重视。为了进一步强化MES系统的功能与应用,立式报工台作为一种新兴的智能硬件…

适用于 Windows 10 的最佳数据恢复免费软件是什么?

有没有适用于 Windows 10 的真正数据恢复免费软件?这篇文章将讨论这个话题,并分享什么是适用于 Windows 10/11/8.1/8/7/Vista/XP 的最佳数据恢复工具。 有没有适用于 Windows 10 的真正免费的数据恢复软件? 丢失重要数据,无论是由…

RISC-V vector(1) --- vector的引入与register说明

Vector相较于SIMD的优势 这两种实现方案,都是为了实现数据级并行性(存在大量的数据可供程序同时计算); SIMD(Single Instruction Multiple Data) SIMD是将数据宽度和操作类型,都放在了指令中&a…

一道xss题目--intigriti-0422-XSS-Challenge-Write-up

目录 进入挑战 js代码 代码分析 构造payload ​编辑 结果 进入挑战 Intigriti April Challenge题目地址 打开题目后&#xff0c;找到对应页面的js代码&#xff0c;寻找一下我们用户可控的点 js代码 <!DOCTYPE html> <html lang"en"><head> …

[GKCTF 2021]excel 骚操作1

使用010editor打开发现zip头&#xff0c;改后缀名xlsx为zip&#xff0c;解压&#xff0c;在D:\python\flag (1)\xl\worksheets目录下有个sheet1.xml就是ecxel的sheet1的主要样式style 看到很多c r"B2" s"1&#xff0c;只是单元格数据不同而已 &#xff0c;还有的…

Awesome-LLMs-for-Video-Understanding - 基于大型语言模型的视频理解研究

Awesome-LLMs-for-Video-Understanding 是 基于大型语言模型的视频理解研究 github : https://github.com/yunlong10/Awesome-LLMs-for-Video-Understandingpaper&#xff1a;Video Understanding with Large Language Models: A Survey https://arxiv.org/pdf/2312.17432 视频…

C++20中的约束与概念

类模板、函数模板和非模板函数(通常是类模板的成员)可能与约束(constraint)相关联&#xff0c;该约束指定对模板参数的要求(requirements)&#xff0c;可用于选择最合适的函数重载和模板特化。约束是使用模板时需要通过模板参数满足的条件或要求。这些要求的命名集合称为概念(c…

Hadoop 分布式集群搭建

HDFS分布式集群搭建 一、部署规划1.1 进程规划1.2 软件规划1.3 用户规划1.4 目录规划 二、 搭建HDFS 分布式集群2.1 HDFS 集群配置2.1.1 下载安装 Hadoop2.1.2 修改 hadoop-env.sh 配置文件2.1.3 修改 core-site.xml 配置文件2.1.4 修改 hdfs-site.xml 配置文件2.1.5 修改 slav…

程序员:全栈的痛你不知道

上周一个同事直接对我开喷&#xff0c;骂我无能&#xff0c;说&#xff1a;“你怎么一个人就搞不定所有系统呢&#xff1f;”&#xff0c;我半支烟纵横IT江湖14余年&#xff0c;还是第一次被人这么嫌弃。 事情缘由 某公司的业务线特别多&#xff0c;有个业务线前后端项目共计…

ComfyUI IPAdapter plus的模型应该怎么装-免费版-2024.8.25

&#x1f386;背景 ipadapter相关的节点大家应该都不陌生&#xff0c;具体是做什么的就不详细介绍了&#xff0c;但是还是有很多新入门的朋友不太了解这个节点相关的这一堆模型到底应该怎么安装。这里就借着官方节点的介绍来大概讲下这个话题。 涉及到的节点源地址&#xff1…

【Qt】Qt系统 | Qt事件| 鼠标事件

文章目录 鼠标事件鼠标点击事件鼠标释放事件鼠标双击事件鼠标移动事件 滚轮事件 在 Qt 中&#xff0c;鼠标事件是用 QMouseEvent 实现的。当在窗口中按下鼠标或者移动鼠标时&#xff0c;都会产生鼠标事件 鼠标事件 鼠标点击事件 鼠标按下时通过 虚函数 mousePressEvent() 来…

线程安全是什么问题?如何引起?死锁是啥?如何解决?

目录 一、什么是线程不安全&#xff1f; 二、如何引起的线程安全&#xff1f;怎么解决&#xff1f; 1&#xff09;CPU调度执行是随机的&#xff0c;抢占式执行&#xff08;根本原因&#xff0c;硬件层面咱们无法干预&#xff09; 2&#xff09;多个线程&#xff0c;对同一变…

【Hot100】LeetCode—105. 从前序与中序遍历序列构造二叉树

目录 1- 思路递归 2- 实现⭐105. 从前序与中序遍历序列构造二叉树——题解思路 3- ACM 实现 原题连接&#xff1a;105. 从前序与中序遍历序列构造二叉树 1- 思路 递归 前序&#xff1a;中左右中序&#xff1a;左中右 让前序的第一个元素作为中序的分割点 分割思路 1- 递归…

做个实验

做个实验 #include <bits/stdc.h> using namespace std; #define int long long #define ll __int128_t #define ar array<int, 2> #define arr array<int, 3> int n, m, k, inf 1LL << 61, mod 998244353;// 1e97; const int N 5e5 50;void sol…

使用gitee存储项目

gitee地址&#xff1a;Gitee - 基于 Git 的代码托管和研发协作平台 创建gitee远程仓库 将远程仓库内容拉取到本地仓库 复制下面这个地址 通过小乌龟便捷推送拉取代码&#xff1a;https://blog.csdn.net/m0_65520060/article/details/140091437

基于51单片机的百叶窗proteus仿真

地址&#xff1a;https://pan.baidu.com/s/19M6jeTIHJcyDBGNx4H9nTA 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMicroelectron…

RabbitMQ的核心概念

RabbitMQ是一个消息中间件&#xff0c;也是一个生产者消费者模型&#xff0c;负责接收&#xff0c;存储和转发消息。 核心概念 Producer 生产者&#xff0c;是RabbitMQ Server的客户端&#xff0c;向RabbitMQ发送消息。 Consumer 消费者&#xff0c;是RabbitMQ Server的客…

快手怎么免费的去掉视频水印?分享这三个工具给你

​ 我们经常会遇到想要保存的视频带有水印&#xff0c;这不仅影响美观&#xff0c;也不利于分享。为了解决这个问题&#xff0c;我将分享三个免费去除视频水印的工具&#xff0c;帮助你轻松去除水印&#xff0c;享受无干扰的视频体验。 工具一&#xff1a;奈斯水印助手(小程序…

数码管进阶设计验证

前言 随着数字电路和嵌入式系统的广泛应用&#xff0c;数码管作为一种常见的显示设备&#xff0c;在各种电子产品中扮演着重要角色。数码管以其结构简单、显示清晰和成本低廉的特点&#xff0c;广泛应用于计数器、时钟、测量仪器等领域。然而&#xff0c;传统的数码管设计通常仅…

DBeaver安装使用

文章目录 简介支持的数据库支持的系统 下载安装DBeaver使用修改Maven下载jar地址窗口->首选项连接->驱动->Maven配置仓库地址 选择需要连接的数据库进行连接 简介 DBeaver 是一个通用的数据库管理工具和 SQL 客户端&#xff0c;支持 MySQL, PostgreSQL, Oracle, DB2,…