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

Redis基础教程(九):redis有序集合

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快!
💝💝💝如有需要请大家订阅我的专栏【Redis系列】哟!我会定期更新相关系列的文章
💝💝💝关注!关注!!请关注!!!请大家关注下博主,您的支持是我不断创作的最大动力!!!

文章目录

    • 引言
    • 一、Redis 有序集合特性
      • 常用命令
    • 二、实战案例
      • 场景:用户排行榜
        • 步骤1:初始化排行榜
        • 步骤2:添加玩家到排行榜
        • 步骤3:获取排行榜前10名玩家
        • 步骤4:获取特定分数区间的玩家
        • 步骤5:更新玩家分数
        • 步骤6:移除特定分数区间的玩家
      • 场景:任务队列按优先级排序
        • 步骤1:初始化任务队列
        • 步骤2:添加任务到队列
        • 步骤3:获取最高优先级的任务
        • 步骤4:移除已完成的任务
    • 总结

引言

Redis 的有序集合(Sorted Set)是一种特殊的数据结构,它结合了集合的唯一性与列表的排序功能,允许你存储一系列唯一的元素,并为每个元素关联一个分数(score)。这种数据结构非常适合用于实现排行榜、任务队列按优先级排序、时间序列数据的存储与查询等场景。本文将详细介绍 Redis 有序集合的基本概念、常用命令,并通过实战案例展示有序集合在实际项目中的应用。

一、Redis 有序集合特性

有序集合在内部实现上,使用了跳表(Skip List)和字典(Dictionary)两种数据结构,跳表用于保证元素的快速排序和查找,而字典则用于保证元素的唯一性。有序集合中的元素和分数(score)一起被存储,这使得你可以按照分数对集合进行排序。

常用命令

  1. ZADD key score member [score member …]

    • 描述:将一个或多个成员元素及其分数加入到有序集合中,如果成员元素已经存在,则更新其分数。
    • 示例:ZADD leaderboard 100 player1 200 player2
  2. ZCARD key

    • 描述:返回有序集合的基数(元素数量)。
    • 示例:ZCARD leaderboard
  3. ZCOUNT key min max

    • 描述:计算在有序集合中指定区间分数的成员数。
    • 示例:ZCOUNT leaderboard 100 200
  4. ZRANGE key start stop [WITHSCORES]

    • 描述:返回有序集合中指定范围的成员,可以包含分数。
    • 示例:ZRANGE leaderboard 0 10 WITHSCORES
  5. ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

    • 描述:返回有序集合中指定分数区间的成员,可以包含分数。
    • 示例:ZRANGEBYSCORE leaderboard 100 200 WITHSCORES LIMIT 0 10
  6. ZREVRANGE key start stop [WITHSCORES]

    • 描述:返回有序集合中指定范围的成员,按分数降序排列,可以包含分数。
    • 示例:ZREVRANGE leaderboard 0 10 WITHSCORES
  7. ZREMRANGEBYRANK key start stop

    • 描述:移除有序集合中指定排名范围的成员。
    • 示例:ZREMRANGEBYRANK leaderboard 0 10
  8. ZREMRANGEBYSCORE key min max

    • 描述:移除有序集合中指定分数范围的成员。
    • 示例:ZREMRANGEBYSCORE leaderboard 100 200
  9. ZREM key member [member …]

    • 描述:移除有序集合中的一个或多个成员。
    • 示例:ZREM leaderboard player1
  10. ZSCORE key member

    • 描述:返回有序集合中成员的分数。
    • 示例:ZSCORE leaderboard player1

二、实战案例

场景:用户排行榜

假设我们正在开发一个在线游戏,需要实时显示玩家的排行榜,根据玩家的分数进行排序。

步骤1:初始化排行榜
redis-cli DEL leaderboard
步骤2:添加玩家到排行榜
redis-cli ZADD leaderboard 1000 player1
redis-cli ZADD leaderboard 800 player2
redis-cli ZADD leaderboard 1200 player3
步骤3:获取排行榜前10名玩家
redis-cli ZRANGE leaderboard 0 9 WITHSCORES
步骤4:获取特定分数区间的玩家
redis-cli ZRANGEBYSCORE leaderboard 800 1000 WITHSCORES
步骤5:更新玩家分数
redis-cli ZADD leaderboard 1100 player1
步骤6:移除特定分数区间的玩家
redis-cli ZREMRANGEBYSCORE leaderboard 800 900

场景:任务队列按优先级排序

假设我们正在构建一个任务调度系统,需要根据任务的优先级进行调度。

步骤1:初始化任务队列
redis-cli DEL task_queue
步骤2:添加任务到队列
redis-cli ZADD task_queue 5 task1
redis-cli ZADD task_queue 10 task2
redis-cli ZADD task_queue 1 task3
步骤3:获取最高优先级的任务
redis-cli ZRANGE task_queue 0 0 WITHSCORES
步骤4:移除已完成的任务
redis-cli ZREM task_queue task1

喜欢博主的同学,请给博主一丢丢打赏吧↓↓↓您的支持是我不断创作的最大动力哟!感谢您的支持哦😘😘😘
打赏下吧

💝💝💝如有需要请大家订阅我的专栏【Redis系列】哟!我会定期更新相关系列的文章
💝💝💝关注!关注!!请关注!!!请大家关注下博主,您的支持是我不断创作的最大动力!!!

总结

Redis 的有序集合因其独特的排序和唯一性功能,在排行榜、任务队列、时间序列数据存储等多种场景中展现了其强大的应用价值。掌握这些知识和技能,将帮助你更好地利用 Redis 的数据结构特性,提升应用程序的性能和用户体验。在实际应用中,有序集合往往与其他数据结构结合使用,以实现更复杂的功能和更精细的数据管理。

Redis相关文章索引文章链接
Redis基础教程(一):redis配置Redis基础教程(一):redis配置
Redis基础教程(二):redis数据类型Redis基础教程(二):redis数据类型
Redis基础教程(三):redis命令Redis基础教程(三):redis命令
Redis基础教程(四):redis键(key)Redis基础教程(四):redis键(key)
Redis基础教程(五):string字符串Redis基础教程(五):string字符串
Redis基础教程(六):redis 哈希(Hash)Redis基础教程(六):redis 哈希(Hash)
Redis基础教程(七):redis列表(List)Redis基础教程(七):redis列表(List)
Redis基础教程(八):redis集合(Set)Redis基础教程(八):redis集合(Set)

❤️❤️❤️觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

相关文章:

Redis基础教程(九):redis有序集合

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…...

Servlet与Servlet容器

什么是Servlet? Servlet是Java EE(现称Jakarta EE)中的一个组件,通常用于创建动态Web内容。Servlet是运行在Web服务器上的Java程序,它处理客户端的请求并生成响应。Servlet的核心功能是处理HTTP请求和响应。下面是一个servlet例…...

腾讯centos mysql安装

腾讯centos mysql安装 腾讯云提供了一系列的云计算服务,包括操作系统、数据库、服务器等。在腾讯云上安装CentOS操作系统和MySQL数据库可以按照以下步骤进行: 登录腾讯云控制台(登录 - 腾讯云)。在控制台页面上方的搜索框中输入…...

c_各个unsigned int 和 int的取值范围

bool, uint8_t, uint16_t, uint32_t, uint64_t, int8_t, int16_t, int32_t, int64_t 取值范围分别是什么? 定义形式: typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; typedef unsigned long uint64_…...

C#/WPF 自制截图工具

在日常使用电脑办公时,我们经常遇到需要截图然后保存图片,我们往往需要借助安装截图工具才能实现,现在我们通过C#自制截图工具,也能够轻松进行截图。 我们可以通过C#调用WindousAPI来实现截图,实例代码如下&#xff1a…...

以腾讯为例,手把手教你搭建产品帮助中心

一个精心设计的产品帮助中心对于提高用户满意度和体验至关重要。腾讯,作为全球领先的互联网企业,通过其多样化的产品线(包括微信、QQ、腾讯游戏、腾讯视频等)吸引了亿万用户。下面将以腾讯为例,向您展示如何搭建一个高…...

计算机网络概述--自我学习用

计算网络体系概述 相关问题 计算机网络为什么要分层?计算机网络是怎么分层的?三种计算机网络模型的关系是什么?每一层分别包含哪些协议?计算机网络中,数据如何在各层中传播?数据在网络各层中的存在形式是…...

超级好用的java http请求工具

kong-http 基于okhttp封装的轻量级http客户端 使用方式 Maven <dependency><groupId>io.github.kongweiguang</groupId><artifactId>kong-http</artifactId><version>0.1</version> </dependency>Gradle implementation …...

在原有的iconfont.css文件中加入新的字体图标

前言&#xff1a;在阿里图标库中&#xff0c;如果你没有这个字体图标的线上项目&#xff0c;那么你怎么在本地项目中的原始图标文件中添加新的图标呢&#xff1f; 背景&#xff1a;现有一个vue项目&#xff0c;下面是这个前端项目的字体图标文件。现在需要新开发功能页&#x…...

使用 ESP32-WROOM + DHT11 做个无屏温湿度计

最近梅雨天&#xff0c;有个房间湿度很大&#xff0c;而我需要远程查看温湿度&#xff0c;所以无所谓有没有显示屏&#xff0c;某宝上的温湿度计都是带屏的&#xff0c;如果连WIFI查看温湿度操作也比较麻烦&#xff0c;还需要换电池&#xff0c;实在不能满足我的需求&#xff0…...

如何使用 SwiftUI 构建 visionOS 应用

文章目录 前言WindowsVolumes沉浸式空间结论 前言 Apple Vision Pro 即将推出&#xff0c;现在是看看 SwiftUI API 的完美时机&#xff0c;这使我们能够将我们的应用程序适应 visionOS 提供的沉浸式世界。苹果表示&#xff0c;构建应用程序的最佳方式是使用 Swift 和 SwiftUI。…...

InspireFace-商用级的跨平台开源人脸分析SDK

InspireFace-商用级的跨平台开源人脸分析SDK InspireFaceSDK是由insightface开发的⼀款⼈脸识别软件开发⼯具包&#xff08;SDK&#xff09;。它提供了⼀系列功能&#xff0c;可以满⾜各种应⽤场景下的⼈脸识别需求&#xff0c;包括但不限于闸机、⼈脸⻔禁、⼈脸验证等。 该S…...

华为HCIP Datacom H12-821 卷24

1.单选题 企业大楼有大量员工通常都在上班时在大厅开始接入到公司的WLAN网络,随着每位员工走到各自的工位过程中,每个人的移动端叶通过漫游的方式漫游到各自的网络覆盖区域。为了尽量保证每个终端的IP地址是固定的,建议的做法是? A、配置VLAN Pool并配置顺序算法 B、…...

TikTok马来西亚直播网络怎么配置?

TikTok是一款全球流行的社交媒体应用&#xff0c;在东南亚地区拥有大量用户。在马来西亚这个多元化的国家&#xff0c;配置高效稳定的直播网络对TikTok的运营至关重要。 配置马来西亚直播网络的必要性 广泛的地理覆盖&#xff1a;马来西亚包括大片陆地和众多岛屿&#xff0c;网…...

基于若依的文件上传、下载

基于若依实现文件上传、下载 文章目录 基于若依实现文件上传、下载1、前端实现-文件上传1.1 通用上传分析1.2 修改实现上传接口 2、后端实现-文件上传3、后端实现-文件下载4、前端实现-文件下载 官网其实也写了&#xff0c;但是我是自己改造封装了一下&#xff0c;再次迈向全栈…...

论文回顾 | CVPR 2021 | How to Calibrate Your Event Camera | 基于图像重建的事件相机校准新方法

论文速览 | CVPR 2021 | How to Calibrate Your Event Camera | 基于图像重建的事件相机校准新方法 1 引言 在计算机视觉和机器人领域,相机校准一直是一个基础而又重要的问题。传统的相机校准方法主要依赖于从已知校准图案中提取角点,然后通过优化算法求解相机的内参和外参。这…...

高级java每日一道面试题-2024年7月1日

题目&#xff1a;请解释 Java 中的内存泄漏&#xff0c;并说明如何检测和避免内存泄漏。 答案&#xff1a; 内存泄漏指的是程序中不再使用的对象&#xff0c;由于某些原因没有被垃圾回收器回收&#xff0c;仍然占据着内存空间&#xff0c;导致可用内存逐渐减少&#xff0c;最…...

当需要对多个表进行联合更新操作时,怎样确保数据的一致性?

文章目录 一、问题分析二、解决方案三、示例代码&#xff08;以 MySQL 为例&#xff09;四、加锁机制示例五、测试和验证六、总结 在数据库管理中&#xff0c;经常会遇到需要对多个表进行联合更新的情况。这种操作带来了一定的复杂性&#xff0c;因为要确保在整个更新过程中数据…...

数据结构-线性表的应用

目录 前言一、有序表的合并1.1 顺序表实现1.2 单链表实现 二、稀疏多项式的相加和相乘2.1 稀疏多项式的相加2.2 稀疏多项式的相乘 总结 前言 本篇文章介绍线性表的应用&#xff0c;分别使用顺序表和单链表实现有序表的合并&#xff0c;最后介绍如何使用单链表实现两个稀疏多项…...

cpp http server/client

httplib 使用httplib库 basedemo server.cpp #include "httplib.h" #include <iostream> using namespace httplib;int main(void) {Server svr;svr.Get("/hello", [](const Request& req, Response& res) {std::cout << "lo…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...