零基础学习Redis(10) -- zset类型命令使用

news2024/9/20 18:40:44

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。

1. zset常用命令

1.1 zadd

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

 使用时,在key中添加一对或多对 [score,member] ,返回添加成功的元素数量。

NX代表只有当member 不存在时才会添加成功,XX代表只有当menmber存在时才会添加成功,此时操作为更新score,不写则,member存在时为更新操作,不存在则为添加操作。

注意:更新操作不会增加zadd返回的值

GT表示只有当添加的元素不存在或者更新的score大于原来的score才会成功;LT表示只有当添加的元素不存在或者更新的score小于原来的score才会成功

CH:使zadd语句的返回值包含被修改的元素数量:

INCR :当添加的元素存在时,不是更新score而且在原来的值上增加score,并返回添加后的值,使用这个选项后,每次zadd命名只能操作一个元素。

1.2 zrange / zrevrange

zrange key start stop [WITHSCORES]

返回区间内的元素,加上withscores会连同score一起返回:

zrevrange key start stop [WITHSCORES]

和zrange类似,不过是按降序输出:

1.3 zcard 

zcard key 

返回key中的元素数量 

1.4 zcount

zcount key min max

返回分数在min 和 max之间的元素,闭区间:

排除min:

排除max:

zcount 的时间复杂度是logn

zset内存了每个元素的排名, 所有这里只需通过二分查找,找到min和max,通过减法即可得到元素数量。

min和max可以为两个特殊的值, -inf 和 inf 代表负无穷大和正无穷大:

1.5 zrangebyscore 

zrangebyscore key min max [withscores] 

返回score在 min,max之内的元素:

1.6 zpopmax / zpopmin

zpopmax key [count] 

删除并返回score最大的count个元素,删除一个元素的时间复杂度是O(logN):

zpopmin则是删除最小得元素,用法和zpopmax相同 

1.7 bzpopmax / bzpopmin

 bzpopmax key [key ...] timeout

bzpopmax是zpopmax带阻塞的版本,并且可以同时等待多个key,使用时必须设置超时时间单位是秒,可以写作小数,会返回对应得key和元素:

 同理,bzpopmin用法类似

1.8 zrank / zrevrank

 zrank key member

获取元素member的排名,元素不存在则返回nil:

zrevrank key member 

获取元素的逆序排名:

1.9 zscore 

zscore key member 

返回元素的score:

1.10 zrem 

zrem key member [ member ...] 

删除一个或多个member,返回删除成功的数量:

1.11 zremrangebyrank 

zremrangebyrank key start stop 

删除指定区间内的元素,返回删除的数量:

1.12 zincrby

  zincrby increment member 

对指定member的score增加increment,increment可以为小数和负数,返回增加后member的score:

1.13 zinterstore / unionstore

zinterstore destination numkeys key [key ...] [WEIGHTS weight [ weight ...]] [aggregate < sum | min | max>]

  •  对多个key做交集,结果存入destination
  • numkeys代表key的数量,weights代表每个key的权重,计算时,score会乘以权重
  • aggregate ,相同key的score的计算方式,sun代表求和,min取小的,max取大的默认是sum

 

key1权重是1,key2权重是5,计算时分数会乘以权重,所有key3中的b分数是16 + 5 = 21

unionstore用于求并集,用法和zinterstore相同

2. zset编码方式

zset有两种编码方式:

  • ziplist:如果有序集合中的元素个数比较少,或单个元素体积比较小,就会使用压缩列表,节省空间
  • skiplist:如果元素数量比较多,或单个元素体积较大就会使用跳表来存,跳表是一个复杂链表,查询复杂度是logN,并且更适合范围查找数据

其中编码方式转换的阈值可以在配置文件中进行设置 

3. zset应用场景 

zset最主要的应用场景是排行榜系统 

游戏分数排行:只需把玩家信息和分数存储到zset中即可,自动就会形成了一个排行榜,分数发生变化可以通过zincrby修改分数,排名也会自动动态调整(logN)

**热搜:这类场景通常是用综合数值决定排名的,例如,点赞数,评论数,转发量,可以分别使用zset存储,然后通过 zinterstore计算各个数值的综合得分(可以设置权重等)得到排行榜

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

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

相关文章

【计算机方向】中科院二区宝刊!国人发文友好,晋升从此不是梦!

期刊解析 &#x1f6a9;本 期 期 刊 看 点 &#x1f6a9; 国人发文占比第一&#xff0c;审稿友好 审稿速度快 自引率5.7% 今天小编带来计算机领域SCI快刊的解读&#xff01; 如有相关领域作者有意投稿&#xff0c;可作为重点关注&#xff01; 01 期刊信息✦ 期刊名称&…

Centos7安装JDK1.8保姆版

工欲善其事&#xff0c;必先利其器。这句话同样适用于学习Java编程。在开始Java的学习旅程之前&#xff0c;我们必须首先配置好适合的开发环境。 通过事先准备好这些工具和配置&#xff0c;我们可以避免在学习过程中遇到因环境问题导致的代码异常或错误。一个稳定、高效的开发环…

python binning data openAI gym

题意&#xff1a;Python 数据分箱 OpenAI Gym 问题背景&#xff1a; I am attempting to create a custom environment for reinforcement learning with openAI gym. I need to represent all possible values that the environment will see in a variable called observati…

11.Java基础概念-ArrayList

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 Facts speak louder than words&#xff01; ArrayList是Java中的一…

kubectl的安装使用

1. Windows下载kubectl 2.将kucectl的所在目录添加到PATH环境变量下 3.运行 kubectl version --client 命令来测试kubectl是否正确安装并显示其版本信息。这个命令会显示kubectl客户端的版本信息&#xff0c;如果一切正常&#xff0c;这将确认kubectl已经成功安装在你的Windo…

DC-DC升降压芯片(MC34063A/33063)典型电路与元件参数在线计算

MC34063包含DC/DC变换器所需的主要功能的单片控制电路&#xff0c;多用于升压变换器、降压变换器、反向器的控制核心部分。 MC34063的基本结构及引脚图功能&#xff1a; 1脚&#xff1a;开关管T1集电极引出端&#xff1b; 2脚&#xff1a;开关管T1发射极引出端&#xff1b; …

一次耗时的安全测试

简介 接到一个安全测试任务&#xff0c;数据包使用安全控件进行了加密。通过开发插件&#xff0c;实现明文测试&#xff0c;最终发现了2个越权。 加解密过程分析 访问网站首页&#xff0c;需要先安装一个控件。安装完成后&#xff0c;访问网站发现数据包加密处理。按照以前的…

基于springboot+vue实现的在线商城系统

系统主要功能&#xff1a; &#xff08;1&#xff09;商品管理模块&#xff1a;实现了商品的基本信息录入、图片上传、状态管理等相关功能。 &#xff08;2&#xff09;商品分类模块&#xff1a;实现了分类的增删改查、分类层级管理、商品分类的关联等功能。 &#xff08;3&…

不懂编程的都觉得AI要取代程序员了,程序员自己却在偷着乐?真相是…

最近&#xff0c;AI写代码的新闻满天飞&#xff0c;不懂编程的人都觉得AI要逆天了&#xff0c;程序员马上就要失业了&#xff01;但奇怪的是&#xff0c;程序员群体——这帮最懂代码、最常使用AI编程工具的人&#xff0c;怎么反而觉得AI取代不了他们呢&#xff1f;&#x1f914…

TD综合教程——噪波球和正交线性脉冲(附思路和工程文件)

一、噪波球 整体思路&#xff1a; 渲染三件套&#xff1a;Geometry COMP、Camera COMP、Render TOP 在此基础上进行pbr MAT材质和environment COMP环境光渲染 使sphere TOP&#xff08;球体&#xff09;更加柔和&#xff0c;将类型改为NURBS Twist TOP&#xff08;扭曲&#x…

C++---内存管理

1 C/C内存分布 栈区&#xff1a;由编译器自动分配和释放&#xff0c;存放运行时候的局部变量&#xff0c;函数参数&#xff0c;返回数据&#xff0c;返回地址。 堆区&#xff1a;一般由程序员自己分配&#xff0c;然后自己释放&#xff0c;例如栈的实现malloc开辟的数组空间。…

尝试开发油猴(Tampermonkey)脚本

篡改猴 (Tampermonkey) 是拥有 超过 1000 万用户 的最流行的浏览器扩展之一。 它适用于 Chrome、Microsoft Edge、Safari、Opera Next 和 Firefox。 有些人也会把篡改猴(Tampermonkey)称作油猴(Greasemonkey)&#xff0c;尽管后者只是一款仅适用于 Firefox 浏览器的浏览器扩展…

UE5 Linux编译流程(实战)

文章目录 概述setup.sh2.GenerateProjectFiles.sh3.make其他的 小结 概述 之前写过一篇linux上代码的流程&#xff0c;这一篇&#xff0c;补下编译流程。4.26还是4.27的时候&#xff0c;做过编译&#xff0c;那会刚出来&#xff0c;当时编译用的是QT&#xff0c;跟着文档&…

传输大咖40 | 医药行业跨国文件传输的挑战与解决方案

在当今全球化浪潮的推动下&#xff0c;医药健康领域的国际合作变得越发密切。无论是共享临床试验的数据&#xff0c;还是协作推进新药的研发&#xff0c;一个高效的文件传输系统都显得尤为关键&#xff0c;它直接关系到整个行业的快速进步。但是&#xff0c;当文件跨越国界进行…

Redis缓存击穿、缓存穿透、缓存雪崩场景描述及解决方案

Redis缓存击穿、缓存穿透、缓存雪崩场景描述及解决方案 缓存穿透 用户请求了很多既不存在于redis也不存在于数据库的无效数据请求&#xff0c;导致redis无法拦截&#xff0c;最终所有请求都落在数据库中 解决方案&#xff1a;缓存空对象&#xff08;会导致redis中存了很多垃…

The Magic Loop-快速职业发展的框架

前言 在 B2B 系列中短暂休息一下&#xff0c;我很高兴为你带来 Ethan Evans 的重要客座文章。在 Amazon 的 15 年里&#xff0c;Ethan 帮助发明了 Prime Video、Amazon Video、Amazon Appstore、Prime Gaming&#xff08;以前称为 Twitch Prime&#xff09;和 Twitch Commerce…

电阻器件选型

电阻参数 一般都是&#xff08;前面数字x10^末尾数字&#xff09;&#xff0c;如下面的例子 大概清楚电阻的结构即可&#xff0c;无需掌握 电阻器安装在陶瓷基板的上面&#xff1b;在每一端都有内部金属电极&#xff0c;使其与厚膜电阻体接触&#xff1b;电阻原件的成分是金…

第144天:内网安全-Linux权限维持OpenSSHPAM后门SSH软链接公私钥登录

目录 案例一&#xff1a; 权限维持-Linux-替换版本-OpenSSH 后门 案例二&#xff1a; 权限维持-Linux-更改验证-SSH-PAM 后门 案例三&#xff1a; 权限维持-Linux-登录方式-软链接&公私钥&新帐号 ssh软链接 公私钥 新帐号 案例一&#xff1a; 权限维持-Linux-替换…

一. Unity实现虚拟摇杆及屏幕自适应功能

手游里面很多类型的游戏都需要用到遥感功能&#xff0c;例如王者荣耀&#xff0c;和平精英等&#xff0c;之前的摇杆功能都是用类似于Easy Touch的插件进行开发的&#xff0c;今天不借助任何插件来实现虚拟摇杆的功能。 一般虚拟摇杆的组成都是由轮盘和遥感的点组成&#xff0c…

二百六十二、Java——打开别人项目时缺少maven配置,无法运行文件

一、目的 在打开别人的项目时&#xff0c;发现Java文件类型显示出错&#xff0c;没有application&#xff0c;无法运行文件 二、报错原因 项目缺少maven配置 三、解决措施 File——Setting——Maven 修改Maven的配置&#xff0c;指向Maven路径 四、重启项目 文件恢复正常…