当前位置: 首页 > 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…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...