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

Redis数据类型-ZSet

一. 概述
SortedSet又叫zset,它是Redis提供的特殊数据类型,是一种特殊的set类型,继承了set不可重复的特点,并在set基础上为每个值添加一个分数,用来实现值的有序排列。

二. 常用指令
明白它的特点后,接下来,操作一下此数据类型的常用的相关指令。
zadd

将一个或者多个元素及其对应的分数添加到集合中。下面用命令来演示例子:

#新增
192.168.65.15:6379> zadd db 10 oracle 5 mysql 25 redis 7 mongodb

#返回新增的个数
(integer) 4
zcard
返回元素的个数,如果key不存在,则返回0。

192.168.65.15:6379> zcard db
(integer) 4
zcount
返回 分数在 区间之间的个数。

#返回分数score 在 1-3之间的元素个数
192.168.65.15:6379> zcount db 10 20
(integer) 1
zrange
返回指定下标范围内正序排列的值,start 下标从0开始,查询所有范围是0到-1。

#查询所有元素范围用 0 -1
192.168.65.15:6379> zrange db 0 -1

  1. "mysql"
  2. "mongodb"
  3. "oracle"
  4. "redis"

#查询所有元素带分数
192.168.65.15:6379> zrange db 0 -1 withscores

  1. "mysql"
  2. "5"
  3. "mongodb"
  4. "7"
  5. "oracle"
  6. "10"
  7. "redis"
  8. "25"

#查询指定下标范围内的元素
192.168.65.15:6379> zrange db 2 3

  1. "oracle"
  2. "redis"

#查询指定下标范围内的元素,带分数
192.168.65.15:6379> zrange db 2 3 withscores

  1. "oracle"
  2. "10"
  3. "redis"
  4. "25"
    zrevrange
    返回指定下标范围倒序的值,start 下标从0开始,查询所有范围是0到-1。

#查询所有
192.168.65.15:6379> zrevrange db 0 -1

  1. "redis"
  2. "oracle"
  3. "mongodb"
  4. "mysql"

#查询所有元素,带分数
192.168.65.15:6379> zrevrange db 0 -1 withscores

  1. "redis"
  2. "25"
  3. "oracle"
  4. "10"
  5. "mongodb"
  6. "7"
  7. "mysql"
  8. "5"

#查询指定下标范围内的元素值
192.168.65.15:6379> zrevrange db 2 3

  1. "mongodb"
  2. "mysql"
    zrangebyscore
    返回指定分数区间元素的信息,可以返回分数,可以进行分页 limit offset count,offset指的是元素的下标从0开始,count指返回的元素个数,按正序返回。

#正序返回分数在0到30之间的元素信息
192.168.65.15:6379> zrangebyscore db 0 30 withscores

  1. "mysql"
  2. "5"
  3. "mongodb"
  4. "7"
  5. "oracle"
  6. "10"
  7. "redis"
  8. "25"

#正序返回分数在0到30之间的元素信息,并分页,如果是0 -1 表示所有
192.168.65.15:6379> zrangebyscore db 0 30 withscores limit 0 -1

  1. "mysql"
  2. "5"
  3. "mongodb"
  4. "7"
  5. "oracle"
  6. "10"
  7. "redis"
  8. "25"

#正序返回分数在0到30之间的元素信息,并分页,下标从0开始,元素个数是1
192.168.65.15:6379> zrangebyscore db 0 30 withscores limit 0 1

  1. "mysql"
  2. "5"

#正序返回分数在0到30之间的元素信息,并分页,下标从2开始,元素个数是2
192.168.65.15:6379> zrangebyscore db 0 30 withscores limit 2 2

  1. "oracle"
  2. "10"
  3. "redis"
  4. "25"
    zrevrangebyscore
    与zrangebyscore相比,不同是倒序 。

#返回倒序分数30-0的所有元素
192.168.65.15:6379> zrevrangebyscore db 30 0 withscores limit 0 -1

  1. "redis"
  2. "25"
  3. "oracle"
  4. "10"
  5. "mongodb"
  6. "7"
  7. "mysql"
  8. "5"

#返回倒序分数30-0,进行分页,下标从2开始,取2条
192.168.65.15:6379> zrevrangebyscore db 30 0 withscores limit 2 2

  1. "mongodb"
  2. "7"
  3. "mysql"
  4. "5"
    zrank zrevrank
    zrank可以返回元素的正序名次,名次从0开始,第1名返回0。zrevrank可以返回元素的倒序名次,名次也是从0开始,第1名返回0。

#查看正序排名
192.168.65.15:6379> zrange db 0 -1

  1. "mysql"
  2. "mongodb"
  3. "oracle"
  4. "redis"

#redis排名下标为3,那就是第4名
192.168.65.15:6379> db redis
(integer) 3

#redis排名倒序下标为0,那就是第1名
192.168.65.15:6379> zrevrank db redis
(integer) 0
zincrby zscore
zincrby增加指定元素的分数,zscore查询指定元素的分数

#查询一波数据
192.168.65.15:6379> zrange db 0 -1 withscores

  1. "mysql"
  2. "5"
  3. "mongodb"
  4. "7"
  5. "oracle"
  6. "10"
  7. "redis"
  8. "25"

#元素mysql的分数+3
192.168.65.15:6379> zincrby db 3 mysql
"8"

#重新查看排名
192.168.65.15:6379> zrange db 0 -1 withscores

  1. "mongodb"
  2. "7"
  3. "mysql"
  4. "8"
  5. "oracle"
  6. "10"
  7. "redis"
  8. "25"

#单独查询mysql的分数
192.168.65.15:6379> zscore db mysql
"8"
zrem
返回删除成功元素个数。

#删除mysql元素
192.168.65.15:6379> zrem db mysql
(integer) 1

#查询一下
192.168.65.15:6379> zrange db 0 -1

  1. "mongodb"
  2. "oracle"
  3. "redis"
    zremrangebyrank zremrangebyscore
    zremrangebyrank按排名次删除,start从0开始。
    zremrangebyscore按分数区间删除。

#删除0下标的元素
192.168.65.15:6379> zremrangebyrank db 0 0
(integer) 1

#查询,已删除
192.168.65.15:6379> zrange db 0 -1 withscores

  1. "oracle"
  2. "10"
  3. "redis"
  4. "25"

#按分数区间删除
192.168.65.15:6379> zremrangebyscore db 10 20
(integer) 1

#查询,已删除
192.168.65.15:6379> zrange db 0 -1 withscores

  1. "redis"
  2. "25"
    四. 应用场景
    只要涉及到排名、投票等场景都可以用zset。

举一个例子,我们经常在微信上给邻居小朋友投票。
#初始:明明mm 0票, 花花0票 乔乔qq 0票 小小 0票
192.168.65.15:6379> zadd ranking 0 mm 0 hh 0 qq 0 xx
(integer) 4

#查询一下初始值
192.168.65.15:6379> zrange ranking 0 -1 withscores

  1. "hh"
  2. "0"
  3. "mm"
  4. "0"
  5. "qq"
  6. "0"
  7. "xx"
  8. "0"

#明明拉来10票
192.168.65.15:6379> zincrby ranking 10 mm
"10"

#花花拉来1000票
192.168.65.15:6379> zincrby ranking 1000 hh
"1000"

#乔乔拉来50票
192.168.65.15:6379> zincrby ranking 50 qq
"50"

#小小拉来30票
192.168.65.15:6379> zincrby ranking 30 xx

#最终排名:花花1000 乔乔50 小小 30 明明 10票
192.168.65.15:6379> zrevrange ranking 0 -1 withscores

  1. "hh"
  2. "1000"
  3. "qq"
  4. "50"
  5. "xx"
  6. "30"
  7. "mm"
  8. "10"

#经调查违规拉票,取消资格
192.168.65.15:6379> zrem ranking hh
(integer) 1

#最后只取第一名
192.168.65.15:6379> zrevrange ranking 0 0 withscores

  1. "qq"
  2. "50"

 

相关文章:

Redis数据类型-ZSet

一. 概述 SortedSet又叫zset,它是Redis提供的特殊数据类型,是一种特殊的set类型,继承了set不可重复的特点,并在set基础上为每个值添加一个分数,用来实现值的有序排列。 二. 常用指令 明白它的特点后,接下来…...

国外各大学和学院对于ChatGPT使用立场总结

ChatGPT和生成式AI的快速普及对教育这个专业领域带来了威胁——全国各地的大学和学院都召开了紧急会议,讨论如何应对学生利用AI作弊的风险。 一部分学校和教授担心这项技术会成为学生在论文或其他写作作业和考试中寻求捷径的工具。而这种生成内容的方式往往能够绕开…...

我在VScode学Java(Java二维数组)

我的个人博客主页:如果\真能转义1️⃣说1️⃣的博客主页 关于Java基本语法学习---->可以参考我的这篇博客:(我在Vscode学Java) 接上回Java一维数组的介绍(我在VScode学Java(Java一维数组) ) 二维数组是Java中的一…...

HTML-iconfont动态图标SVG效果--阿里巴巴图标矢量库

给北大打工,实现官网首页动态图标效果_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Ys4y1c7oh/?spm_id_from333.1007.top_right_bar_window_default_collection.content.click&vd_source924f5dad6f2dcb0a3e5dca4604287ecd(本篇笔记操作方法…...

C++17完整导引-模板特性之编译器的if语句

编译期if语句 if constexpr 编译期if语句使用编译期if语句编译期if的注意事项编译期if影响返回值类型即使在 *then* 部分返回也要考虑 *else* 部分编译期短路求值 其他编译期if的示例完美返回泛型值使用编译期if进行类型分发 带初始化的编译期if语句在模板之外使用编译期if参考…...

告别Excel,免费大数据分析与可视化工具,让你的论文图表“高大上”

数据分析工具很多,可以分为表格、数据库、BI工具、编程等四大工具。每个大类又有很多的工具,例如表格包括Excel、WPS、Google Sheets、Airtable等。编程工具包括Python和R。 搞科研几年了,笔者一直都是在使用Excel做数据分析和可视化&#xf…...

C++ 中的继承和多态

C 中的继承和多态 一、继承二、函数重载、隐藏、覆盖、重写1.函数重载(Function Overload)2.函数隐藏(Function Hiding)3.函数重写与函数覆盖(Function Override) 三、多态四、纯虚函数和抽象类五、多重继承…...

NestedFormer:用于脑肿瘤分割的嵌套模态感知Transformer

文章目录 NestedFormer: Nested Modality-AwareTransformer for Brain Tumor Segmentation摘要方法Global Poolformer EncoderNested Modality-Aware Feature AggregationModality-Sensitive Gating 实验结果 NestedFormer: Nested Modality-AwareTransformer for Brain Tumor …...

【SQLServer】sqlserver数据库导入oracle

将sqlserver数据库导入到oracle 实用工具: SQL Server Management Studio 15.0.18424.0 SQL Server 管理对象 (SMO) 16.100.47021.07eef34a564af48c5b0cf0d617a65fd77f06c3eb1 Microsoft Analysis Services 客户端工具 15.0.19750.0 Microsoft 数据访问组件 (MDAC) …...

【5.20】四、性能测试—性能测试工具

目录 4.5 性能测试工具 4.5.1 LoadRunner 4.5.2 JMeter 4.5 性能测试工具 性能测试是软件测试中一个很重要的分支,人们为了提高性能测试的效率,开发出了很多性能测试工具。一款好的测试工具可以极大地提高测试效率,为发现软件缺陷提供重要…...

朗诵素材-《少年正是读书时》(两角色主持朗诵)

少年正是读书时 1、少年正是读书时 男:我们生活在/古老的土地上 男:我们拥有/共同的梦想 女:那朗朗的书声/那浓浓的墨香 女:都在告诉我们 合:少年正是/读书时 2、为何要读书 男:养心&am…...

凭借这个笔记,拿下8家大厂offer....

如何拿到多家大厂的offer,没有过硬的实力,就需要不断的学习。 我是如何拿到,阿里,腾讯,百度等八家大厂的offer的,今天我就给大家来分享我的秘密武器,阿里大神整理的包括,测试基础&am…...

介绍一下全链路压测平台的相关内容

随着互联网技术的不断发展,越来越多的企业开始依赖互联网来实现业务的发展和增长。而对于这些企业而言,如何保证他们的业务在高并发、高负载的情况下依然能够正常运行,是非常重要的一个问题。为了解决这个问题,企业可以使用全链路…...

对于无效的数据,该如何处理

一、无效数据的来源: 在进行数据管理时,无效数据是非常常见的问题。 无效数据可能来自于数据采集、输入错误、数据处理或存储错误等方面。 这些无效数据会对结果造成严重的影响,因此需要及时发现和处理。 二、处理无效数据: …...

港联证券:机器人行业有望迎来整体性机会 六氟磷酸锂翻倍上涨

表示,当前AI调整的时间空间已接近13年水位,且调整的促发因素有望缓和,后续可积极一些。一方面,13年三次调整时间在40日以内、幅度在15%以内。当前AI调整已持续1个月、幅度在10%以上,时空已接近历史。另一方面&#xff…...

css 伪类选择器 结构伪类

css 伪类选择器 结构伪类 常用的: :first-child 所有兄弟元素中的第一个 :last-child 所有兄弟元素中的最后一个 :nth-child(n) 所有兄弟元素中的第n个 :first-of-type 所有同类型兄弟元素中的第一个 :last-of-type 所有同类型兄弟元素中的最后一个 :nth-of-type(…...

常用的表格检测识别方法-表格区域检测方法(上)

常用的表格检测识别方法 表格检测识别一般分为三个子任务:表格区域检测、表格结构识别和表格内容识别。本章将围绕这三个表格识别子任务,从传统方法、深度学习方法等方面,综述该领域国内国外的发展历史和最新进展,并提供几个先进…...

【运维知识进阶篇】集群架构-Rewrite重定向

Rewrite主要实现url地址重写,以及重定向,就是把传入web的请求重定向到其他url的过程。 分以下几种场景使用 1、地址跳转,用户访问一个URL,将其定向到另一个URL 2、协议跳转,用户通过http协议请求网站时,…...

JavaScript如何使用while循环

JavaScript 中的 while 循环是一种常用的循环结构,用于在满足一定条件时重复执行一段代码块。while 循环会先检查条件是否为真,如果为真,则执行循环体中的代码,然后再次检查条件。当条件变为假时,循环会结束。 while(…...

『MySQL 实战 45 讲』16 - “order by” 是怎么工作的

“order by” 是怎么工作的 首先创建一个表 CREATE TABLE t ( id int(11) NOT NULL, city varchar(16) NOT NULL, name varchar(16) NOT NULL, age int(11) NOT NULL, addr varchar(128) DEFAULT NULL, PRIMARY KEY (id), KEY city (city) ) ENGINEInnoDB;全字段排序 在 cit…...

如何从零构建智能FOC轮腿机器人:完整开源硬件系统终极指南

如何从零构建智能FOC轮腿机器人:完整开源硬件系统终极指南 【免费下载链接】foc-wheel-legged-robot Open source materials for a novel structured legged robot, including mechanical design, electronic design, algorithm simulation, and software developme…...

基于ESP32的AIS转WiFi转换器:实现NMEA 0183数据无线传输

1. 项目概述:从VHF-AIS接收器到iPad的无线桥梁作为一名经常在海上折腾电子设备的航海爱好者,我最近遇到了一个挺实际的需求:我的主力导航设备是iPad上的iSailor应用,它功能强大、界面友好,但有个“硬伤”——它需要通过…...

【2026实测】怎么提高论文原创度?盘点8款主流降AI工具,附结构级优化指南

写文章最怕碰到什么,是辛辛苦苦自己码出来的字,却被标了极高的AI值。目前很多文本审核机制对内容的原创度要求极高,纯手写的初稿也可能因为句式太工整被判定为机器生成的。 为了帮几个快被这事折腾疯了的学弟学妹找条出路,我花了…...

收藏|2026年大模型算法岗崛起!程序员小白入门高薪赛道全攻略

前些年,算法岗位一直稳居技术圈高薪行列,无数程序员争相入局,也成为计算机专业毕业生求职首选方向。 伴随大模型技术飞速迭代落地,行业就业格局迎来重大变革。如今含金量最高、人才缺口最大、长期发展潜力顶尖的岗位,已…...

告别Appium!用Python+UIAutomator2搞定Android自动化测试(附完整环境搭建与实战代码)

PythonUIAutomator2:Android自动化测试的高效实践指南 在移动应用测试领域,效率与稳定性始终是工程师们追求的核心目标。传统方案如Appium虽然功能全面,但在执行速度和资源消耗方面往往难以满足高频测试需求。本文将带您探索基于Python和UIA…...

【独家首发】Sora 2 AVI支持并非“开箱即用”:3层封装校验机制详解(RIFF→AVI→OpenCV Mat内存映射链路图解)

更多请点击: https://codechina.net 第一章:Sora 2 AVI支持并非“开箱即用”:核心矛盾与技术定位 Sora 2 的官方文档与发布说明中明确将 AVI 视为“实验性容器支持”,而非默认启用的输入格式。其底层解码栈基于 FFmpeg 5.1 构建&…...

3步免费解锁Cursor Pro:告别设备限制,永久享受AI编程助手高级功能

3步免费解锁Cursor Pro:告别设备限制,永久享受AI编程助手高级功能 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: …...

基于ATmega328P与TFT屏的园艺环境监控系统:硬件选型与软件架构详解

1. 项目概述:打造你的家庭园艺数据监控中心如果你和我一样,是个喜欢在阳台或后院捣鼓花草的园艺爱好者,同时又对电子DIY有点兴趣,那么这个项目绝对会让你兴奋。我们不是在简单地种花,而是在用数据“聆听”植物的需求。…...

条件Shapley值:用shapr包实现更公平的模型可解释性

1. 项目概述与核心价值 如果你在数据科学或机器学习领域工作过一段时间,尤其是在需要向业务方或非技术团队解释模型决策的场景里,你肯定遇到过这样的困境:模型预测准确率很高,但当别人问“为什么这个客户的贷款申请被拒绝了&#…...

麒麟桌面CVE-2024-1086漏洞深度修复指南

1. 这个漏洞不是“修个补丁就完事”:麒麟桌面系统CVE-2024-1086的真实威胁图谱你可能刚在安全通告里看到“麒麟桌面系统修复CVE-2024-1086”,顺手点了个更新,心里想着“又一个内核提权漏洞,打上补丁不就完了?”——我去…...