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
- "mysql"
- "mongodb"
- "oracle"
- "redis"
#查询所有元素带分数
192.168.65.15:6379> zrange db 0 -1 withscores
- "mysql"
- "5"
- "mongodb"
- "7"
- "oracle"
- "10"
- "redis"
- "25"
#查询指定下标范围内的元素
192.168.65.15:6379> zrange db 2 3
- "oracle"
- "redis"
#查询指定下标范围内的元素,带分数
192.168.65.15:6379> zrange db 2 3 withscores
- "oracle"
- "10"
- "redis"
- "25"
zrevrange
返回指定下标范围倒序的值,start 下标从0开始,查询所有范围是0到-1。
#查询所有
192.168.65.15:6379> zrevrange db 0 -1
- "redis"
- "oracle"
- "mongodb"
- "mysql"
#查询所有元素,带分数
192.168.65.15:6379> zrevrange db 0 -1 withscores
- "redis"
- "25"
- "oracle"
- "10"
- "mongodb"
- "7"
- "mysql"
- "5"
#查询指定下标范围内的元素值
192.168.65.15:6379> zrevrange db 2 3
- "mongodb"
- "mysql"
zrangebyscore
返回指定分数区间元素的信息,可以返回分数,可以进行分页 limit offset count,offset指的是元素的下标从0开始,count指返回的元素个数,按正序返回。
#正序返回分数在0到30之间的元素信息
192.168.65.15:6379> zrangebyscore db 0 30 withscores
- "mysql"
- "5"
- "mongodb"
- "7"
- "oracle"
- "10"
- "redis"
- "25"
#正序返回分数在0到30之间的元素信息,并分页,如果是0 -1 表示所有
192.168.65.15:6379> zrangebyscore db 0 30 withscores limit 0 -1
- "mysql"
- "5"
- "mongodb"
- "7"
- "oracle"
- "10"
- "redis"
- "25"
#正序返回分数在0到30之间的元素信息,并分页,下标从0开始,元素个数是1
192.168.65.15:6379> zrangebyscore db 0 30 withscores limit 0 1
- "mysql"
- "5"
#正序返回分数在0到30之间的元素信息,并分页,下标从2开始,元素个数是2
192.168.65.15:6379> zrangebyscore db 0 30 withscores limit 2 2
- "oracle"
- "10"
- "redis"
- "25"
zrevrangebyscore
与zrangebyscore相比,不同是倒序 。
#返回倒序分数30-0的所有元素
192.168.65.15:6379> zrevrangebyscore db 30 0 withscores limit 0 -1
- "redis"
- "25"
- "oracle"
- "10"
- "mongodb"
- "7"
- "mysql"
- "5"
#返回倒序分数30-0,进行分页,下标从2开始,取2条
192.168.65.15:6379> zrevrangebyscore db 30 0 withscores limit 2 2
- "mongodb"
- "7"
- "mysql"
- "5"
zrank zrevrank
zrank可以返回元素的正序名次,名次从0开始,第1名返回0。zrevrank可以返回元素的倒序名次,名次也是从0开始,第1名返回0。
#查看正序排名
192.168.65.15:6379> zrange db 0 -1
- "mysql"
- "mongodb"
- "oracle"
- "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
- "mysql"
- "5"
- "mongodb"
- "7"
- "oracle"
- "10"
- "redis"
- "25"
#元素mysql的分数+3
192.168.65.15:6379> zincrby db 3 mysql
"8"
#重新查看排名
192.168.65.15:6379> zrange db 0 -1 withscores
- "mongodb"
- "7"
- "mysql"
- "8"
- "oracle"
- "10"
- "redis"
- "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
- "mongodb"
- "oracle"
- "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
- "oracle"
- "10"
- "redis"
- "25"
#按分数区间删除
192.168.65.15:6379> zremrangebyscore db 10 20
(integer) 1
#查询,已删除
192.168.65.15:6379> zrange db 0 -1 withscores
- "redis"
- "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
- "hh"
- "0"
- "mm"
- "0"
- "qq"
- "0"
- "xx"
- "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
- "hh"
- "1000"
- "qq"
- "50"
- "xx"
- "30"
- "mm"
- "10"
#经调查违规拉票,取消资格
192.168.65.15:6379> zrem ranking hh
(integer) 1
#最后只取第一名
192.168.65.15:6379> zrevrange ranking 0 0 withscores
- "qq"
- "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做数据分析和可视化…...
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%以上,时空已接近历史。另一方面ÿ…...
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…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
大数据驱动企业决策智能化的路径与实践
📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:数据驱动的企业竞争力重构 在这个瞬息万变的商业时代,“快者胜”的竞争逻辑愈发明显。企业如何在复杂环…...
当下AI智能硬件方案浅谈
背景: 现在大模型出来以后,打破了常规的机械式的对话,人机对话变得更聪明一点。 对话用到的技术主要是实时音视频,简称为RTC。下游硬件厂商一般都不会去自己开发音视频技术,开发自己的大模型。商用方案多见为字节、百…...
