Redis数据类型-ZSet

news2024/10/1 5:31:51

一. 概述
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"

 

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

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

相关文章

OpenAI-whisper语音识别模型

1、whisper简介 Whisper是一个通用的语音识别模型。它是在不同音频的大型数据集上训练的,也是一个多任务模型,可以执行多语言语音识别、语音翻译和语言识别。 whisper有五种模型尺寸,提供速度和准确性的平衡,其中English-only模型…

使用 VS Code 快速搭建 ESP-IDF 开发环境 (Windows、Linux、MacOS)

ESP-IDF 是乐鑫官方的物联网开发框架,适用于 ESP32、ESP32-S、ESP32-C 和 ESP32-H 系列 SoC。它基于 C/C 语言提供了一个自给自足的 SDK,方便用户在这些平台上开发通用应用程序,并集成了大量的软件组件,包括 RTOS、外设驱动程序、…

Flutter 桌面开发 | 键盘快捷键功能 - Shortcuts 组件

theme: cyanosis 在桌面端的开发中,键盘快捷键是非常常见而必要的,比如 Ctrl F 搜索, Ctrl C 复制等。Flutter 既然可以开发桌面端应用,那必然要提供自定义快捷键,触发事件的功能支持。这就是本节要介绍的 Shortcuts…

【5.19】三、白盒测试方法—程序插桩法

目录 3.2 程序插桩法 3.2.1 目标代码插桩 3.2.2 源代码插桩 小提示:HeisenBugs 黑盒测试和白盒测试的异同 3.2 程序插桩法 程序插桩法是一种被广泛使用的软件测试技术,由J.C.Huang教授提出。简单来说,程序插桩就是往被测试程序中插入测…

合肥工业大学计算机组成原理课设-系统硬件综合设计

✅作者简介:CSDN内容合伙人、信息安全专业在校大学生🏆 🔥系列专栏 :信息安全本科生课设-系统硬件综合设计报告 📃新人博主 :欢迎点赞收藏关注,会回访! 💬舞台再大&#…

Varnish代理服务器

一.Varnish概述 1.Varnish 简介 Varnish是一款高性能且开源的反向代理服务器和HTTP加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合。与传统的squid相比,Varnish具有高性能、速度快、管理更加方便等优点,目前很多大型…

Python:如何基于滑动窗口进行气候因子间的相关系数分析?(逐像元)

目录 01 常规的相关系数简单说明 02 滑动窗口下的相关系数分析 最近处理一些气候因子的统计分析,遇到一些问题,记录一下。 01 常规的相关系数简单说明 在研究滑动窗口前,我们先来研究一下常规的相关系数分析,为了简化问题&…

《The Element of Style》阅读笔记 —— 章节 I Elementary Rules of Usage

前言:本科期间担任科研助理时,有幸从导师那里借来这本书通读,只记得自己当时在本子上做了一些笔记,但是想不起来具体记了什么😂前段时间再次从学院的讲座活动中听闻这本书,决定重温一遍,本篇为此…

实验一 结构化分析与设计——数据流图DFD与模块结构图SC

一、实验目的: 掌握传统结构化分析方法中功能建模的基本思想,即数据流分析技术。数据流图DFD是软件系统的逻辑模型,描绘数据在系统中从输入到输出所经历的变换(即加工处理)。 同时,了解变换型和事务型数据…

Copernicus DEM 30 metre dataset now freely available01 December 2020

欧空局宣布,除2019年发布的哥白尼DEM 90米分辨率外,30米分辨率数据的访问权限现已延长,数据集对任何注册用户开放和免费。 自2019年以来,哥白尼方案配备了全球一致的高分辨率数字高程模型,供所有用户使用,以处理各种应用。 哥白尼DEM结合了平坦的水体、连贯的河流流、编…

外汇客户收支风险管理系统助力外汇业务便利化

外管局2019年开始发文推行跨境投资便利化政策,2023年商务部等17部门又发文支持贸易外汇收支便利化政策,从一个小范围试点政策,到各部委大力推广支持,银行业内重点推广,这3年间外汇业务便利化经历了什么? …

狂飙,ChatGPT 官方 iOS 版本应用上线

ChatGPT正式发布App,可在苹果应用商店下载,安卓版也不远了 在手机上也能玩ChatGPT了!当地时间周四(5月18日),人工智能研究公司OpenAI在官网宣布,其在美国推出了聊天机器人ChatGPT的iPhone应用&a…

写公开信可别等被喷,才发现其实可以这样

正文共 1022 字,阅读大约需要 4 分钟 公务员必备技巧,您将在4分钟后获得以下超能力: 快速生成公开信 Beezy评级 :B级 *经过简单的寻找, 大部分人能立刻掌握。主要节省时间。 推荐人 | Kim 编辑者 | Linda ●图片由Le…

Unity A* Pathfinding Project

先下载免费版 https://arongranberg.com/astar/download# 教程首页 https://arongranberg.com/astar/docs/getstarted.html 创建一个plane 当地面 创建一个gameobject 添加组件 PathFinder 长这样 调整每个格子大小的 创建两个layer 一个是阻挡物的 一个是地面的 这里填入阻…

Helm方式部署 zookeeper+kafka 集群 ——2023.05

文章目录 一、添加helm仓库二、安装部署集群2.1 在线安装zookeeperkafka集群2.2 离线安装zookeeperkafka集群 三、验证kafka与zookeeper是否绑定四、测试集群附:可改善地方卸载应用 一、添加helm仓库 # 添加bitnami和官方helm仓库: helm repo add bitna…

独立版:云贝O2O-V2-2.6.3 优化区域代理登录刷新问题

独立版:v2云贝O2O平台版本、版本更新至2.6.3,微信小程序在线上传、后端可开源,即刻源码持续维护更新中,最新全插件(4个)包更新,包修复、这个是源码,独立版; 支持一键更新…

C++——模板(初阶) + string

作者:几冬雪来 时间:2023年5月19日 内容:C模板 string讲解 目录 前言: 1.模板: 1.函数模板的隐/显示实例化: 2.类模板: 2.STL: 1. 什么是STL: 2.STL六大组件…

【Java入门】Java的语言概述

前言 📕作者简介:热爱跑步的恒川,致力于C/C、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。 📗本文收录于Java入门篇系列,该专栏主要讲解:什么是java、java的数据类型与变…

JavaSE入门篇——类和对象(实例理解)

文章目录 一、面向对象简述二、类与对象的基本概念三、类的定义与使用四、this引用五、对象的构造及初始化六、static成员七、 代码块 一、面向对象简述 面向对象是一种现在最为流行的程序设计方法,几乎现在的所有应用都以面向对象为主了,最早的面向对象…

DRMS全国服务中心第一期讲师特训会圆满召开

,时长01:00 近日,【DRMS】数字权益管理系统在美丽的泉城济南展开了为期两天一夜的“【DRMS】全国服务中心首期讲师特训”。此次特训主要针对服务中心的负责人和讲师进行的一场从认知到理念、从规划到执行、从机制到流程的全方位特训。特训中,…