初识redis:Zset有序集合

news2024/11/15 8:26:37

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.coloradmin.cn/o/2074165.html

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

相关文章

初识redis:类型补充

Redis最关键的五个数据类型:String List Hash Set Zset 我们已经学完了,接下来我们再了解一下不是那么重要的,但是仍然有用的类型。 Stream Redis Stream 是 Redis 5.0 版本引入的一种新的数据类型,它提供了一种存储时间顺序消息…

《机器学习》—— OpenCV 对图片的各种操作

文章目录 1、安装OpenCV库2、读取、显示、查看图片3、对图片进行切割4、改变图像的大小5、图片打码6、图片组合7、图像运算8、图像加权运算 1、安装OpenCV库 使用pip是最简单、最快捷的安装方式 pip install opencv-python3.4.2还需要安装一个包含了其他一些图像处理算法函数的…

智慧交通——铁路检测相关数据集

数据集列表 智慧交通系列数据集——铁路相关数据集,用于轨道交通、自动化、计算机等专业结合深度学习、目标检测、语义分割、实例分割相关技术实现应用型研究!!! 下载链接:私信获取 目前已更新数据集类型如下&#x…

cola_os学习笔记(下)

cola_os学习笔记(上) os文件夹 cola_device.c ​ .h放在.c的同层级。作者采用了字符设备注册的方式,在.h中可以看到设备属性。也就是把LED这些设备抽象,外面传入"LED1"这样的参数,使我联想到java的new一个…

GoWeb 设置别名和多环境配置

别名 vite.config.ts中添加代码如下即可 //设置别名resolve: {alias: {"": path.resolve(process.cwd(),"src"),//用替代src}}随后即可使用 配置多环境 vite.config.ts中添加代码如下 envDir: ./viteenv,//相对路径随后在项目根目录创建对应的viteenv…

Flink内存调优

Flink内存调优 JVM 我们知道Flink是基于JobManager和TaskManager管理和运行任务,而他们都是以Java进程的形式运行的,所以在了解 Flink 内存时,我们需要先了解一下Java运行时环境Java虚拟机(JVM) 。 JVM 是可运行 Java 代码的假想计算机 &a…

Visio如何对自画的“不规则封闭图案”填充颜色?

Visio如何对自画的“不规则封闭图案”填充颜色? 当我们想要画一个如下所示的不规则图案时,可以根据Visio工具栏中的曲线/直线等进行拼接组成。 但是,画出来的图形即使是组合后也不能直接填充颜色,这是因为软件并不能识别其为一个…

Tomcat上传jsp木马

一、暴力破解 首先我们访问目标IP和端口 点击server status登录,直接burp进行爆破 我们输入tomcat 123 抓包,发现这个Basic是base64编码后的,解码是 tomcat:123 我们暴破时需要注意这里用的base64构成的,具体操作可以看http://…

【微服务】springboot整合对象映射工具MapStruct使用详解

目录 一、前言 二、实体对象映射概述 2.1 什么是实体对象映射 2.1.1 ORM的几个基本概念 2.1.2 ORM常用的框架 2.2 实体对象映射存在的问题 2.2.1 映射配置错误 2.2.2 性能问题 2.2.3 修改字段不一致问题 三、实体对象属性拷贝工具概述 3.1 什么是实体对象属性拷贝工具…

忘掉 Redux,拥抱 Zutand 和 Jotai 的全新世界

Redux 在现代 React 开发中存在着一些明显的局限性。 首先,Redux 的心智负担较重。它涉及到众多概念,如 Store、Reducer、Action 等,对于初学者来说,理解和掌握这些概念需要花费较多的时间和精力。而且,Redux 要求严格…

【MySQL】一文带你理清<表级锁>(表锁,元数据锁,意向锁)

前言 大家好吖,欢迎来到 YY 滴MySQL系列 ,热烈欢迎! 本章主要内容面向接触过C Linux的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的…

MFC程序设计(一) MFC框架

基本概念 SDK:开发软件的套件 WDK:开发驱动的套件 当我们开发驱动时,两者版本需要一致 MFC:Microsoft Fundation class,即微软基础类库。是基于Win32 SDK进行的封装的框架 。 MFC为我们提供了大量的WindowsSDK的代…

js 数组使用 map 结构渲染个性字段

上代码: //arr来自服务端的数据 arr arr.map(i>{return {value: i.id,text: i.co_name} }) 服务端返回的原始数据: 处理后的数据:

全局上下文视觉转换器(Global Context Vision Transformers)

摘要 https://arxiv.org/pdf/2206.09959 我们提出了全局上下文视觉转换器(GC ViT),这是一种新颖的架构,旨在提高计算机视觉中的参数和计算利用率。我们的方法利用全局上下文自注意力模块与标准的局部自注意力相结合,以…

Qt WebAssembly 警告:构建套件中未设置编译器

目录 Qt WebAssembly 警告:构建套件中未设置编译器问题解决方法 参考资料 Qt WebAssembly 警告:构建套件中未设置编译器 问题 安装好QT之后构建套件中出现黄色感叹号Qt WebAssembly 警告:构建套件中未设置编译器。 原因是现在你只安装了qt for webassembly的qt的库&#xff…

深度学习-OpenCV运用(2)

文章目录 一、OpenCV介绍二、OpenCV运用1.提取与合并通道2.图片打码3.图片组合与缩放4.图像运算 三、总结 一、OpenCV介绍 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,它主要用于实时的图像处理和…

ShareSDK 企业微信

本篇文档主要讲解如何使用企业微信并进行分享和授权。 创建应用 登录企业微信并通过企业认证。选择应用管理 > 应用 >创建应用。编辑应用信息。配置授权登录信息。 以下为创建过程示例,图中信息仅为示例,创建时请按照真实信息填写,否…

Java 入门指南:异常处理(Exception Handling)

异常处理是一种处理运行时错误的机制,是处理运行时错误的有效方法之一,这样可以保留应用程序的常规流程。 Java为异常设计了一套 异常处理机制(Exception Handling),当程序运行过程中发生一些异常情况时,程…

联华证券-美联储降息补贴:额外补贴,美元短期走势或保持稳定

市场进一步确信美联储9月的加息举措,即便对加息幅度的预测并不一致。 当地时间8月23日,美联储主席鲍威尔在Jackson Hole年度会议中发出迄今为止最强烈的降息信号:为避免国内劳动力市场进一步疲弱,美联储打算采取行动,…

Spring(面试篇)

目录 什么是Spring? Spring的两大核心概念 Spring框架的设计目标,设计理念,和核心是什么 Spring的优缺点是什么? Spring由哪些应用场景 Spring由哪些模块组成? Spring框架中都用到了那些设计模式? …