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 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

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

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

相关文章

【踩坑】解决undetected-chromedriver报错cannot connect to-chrome

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 更新: 发现一个非常好用的项目,直接内置uc: GitHub - seleniumbase/SeleniumBase: 📊 Pythons all-in…

白嫖A100活动-入门篇-1.Linux+InterStudio

进入InterStudio 这节课是为了让大家熟悉使用InterStudio平台,以便后续开发 InterStudio平台是算力平台,可以通过平台使用A100,还可以使用“书生”团队集成好的环境、工具,快速部署LLMs. 进入平台: 记得报名,获得免…

Redis IO多路复用

0、前言 本文所有代码可见 > 【gitee code demo】 本文涉及的主题: 1、BIO、NIO的业务实践和缺陷 2、Redis IO多路复用:redis快的主要原因 3、epoll 架构 部分图片 via 【epoll 原理分析】 1、BIO单线程版 1.1 业务代码 client client代码相同…

Sahi+Yolov10

一、前言 了解到Sahi,是通过切图,实现提高小目标的检测效果。sahi 目前支持yolo5\yolo8\mmdet\detection2 等等算法,本篇主要通过实验onnx加载模型的方式使sahi支持yolov10。 二、代码 (1)转换模型 首先使用 conda创…

大数的排列组合公式C代码

我们知道,计算排列A(n,m)和组合C(n,m)可以用先求阶乘的方式实现,但是当数很大时求阶乘很容易溢出,所以这里给出非阶乘的方式求排列组合 求排列 分母和分子可以抵消,最后代码如下 unsigned long long A(int n, int m) {unsigned…

华为机试HJ34图片整理

华为机试HJ34图片整理 题目: 想法: 将输入的字符串中每个字符都转为ASCII码,再通过快速排序进行排序并输出 input_str input() input_list [int(ord(l)) for l in input_str]def partition(arr, low, high):i low - 1pivot arr[high]f…

最新扣子(Coze)实战案例:使用扩图功能,让你的图任意变换,完全免费教程

🧙‍♂️ 大家好,我是斜杠君,手把手教你搭建扣子AI应用。 📜 本教程是《AI应用开发系列教程之扣子(Coze)实战教程》,完全免费学习。 👀 微信关注公从号:斜杠君,可获取完整版教程。&a…

2024年【北京市安全员-B证】报名考试及北京市安全员-B证最新解析

题库来源:安全生产模拟考试一点通公众号小程序 2024年北京市安全员-B证报名考试为正在备考北京市安全员-B证操作证的学员准备的理论考试专题,每个月更新的北京市安全员-B证最新解析祝您顺利通过北京市安全员-B证考试。 1、【多选题】《中华人民共和国安…

手把手教你从零开始构建 AI 视频生成模型

在 GitHub 上发现一篇教程,作者详细介绍了如何使用 Python 语言,从零开始构建一个文本到视频生成模型。 涵盖了从理解理论概念到架构编码,最终实现输入文本提示即可生成视频的全过程。 相关链接 GitHub:github.com/FareedKhan-…

倒退型自闭症与轻度自闭症有什么区别?

作为星贝育园自闭症儿童康复中心的一名专业教师,我深知家长们在面对自闭症谱系障碍(ASD)时的种种疑问与挑战,尤其是关于倒退型自闭症与轻度自闭症之间的区别。今天,我将从专业视角出发,深入浅出地解析这两种…

游戏AI的创造思路-技术基础-强化学习(2)

上一篇中引出了深度强化学习这个大坑,本篇浅浅填一下~~~~ 目录 6. 深度强化学习概述 6.1. 基本概念 6.2. 发展历史 6.3. 基本公式 6.4. Python实现 6.5. 运行原理 6.5.1. 核心要素 6.5.2. 运行原理 6.5.3. 典型算法 6.5.4. Python实现代码 6.6. 优缺点 …

大厂面试官赞不绝口的后端技术亮点【后端项目亮点合集(2)】

本文将持续更新~~ hello hello~ ,这里是绝命Coding——老白~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页:绝命C…

提高论文发表机会:Nature Communications 最新研究教你如何巧妙回复审稿意见

我是娜姐 迪娜学姐 ,一个SCI医学期刊编辑,探索用AI工具提效论文写作和发表。 对于科研搬砖人来说,在论文投稿过程中,如何有效回复审稿意见才能得到审稿人的认可,一直是一个让人困惑又带点玄学的问题。 但是&#xff0c…

【强化学习的数学原理】课程笔记--3(蒙特卡洛方法)

目录 蒙特卡洛方法MC Basic算法sparse reward MC Greedy 算法样本使用效率MC ϵ \epsilon ϵ-Greedy 算法一些例子 蒙特卡洛方法 第二节 推导贝尔曼最优公式中的: q π k ( s , a ) ∑ r P ( r ∣ s , a ) r γ ∑ s ′ P ( s ′ ∣ s , a ) v π k ( s ′ ) q…

vue3 ~ pinia学习

先看两个图 一个vuex 一个pinia 根据图看出来 pinia更简单了 那么具体怎么操作呢 我们来看下~ 第一步 下载 yarn add pinia # 或者使用 npm npm install pinia 第二步 注册 创建一个 pinia 实例 (根 store) 并将其传递给应用: import { createApp } from v…

代码随想录算法训练Day57|LeetCode200-岛屿数量、LeetCode695-岛屿的最大面积

岛屿数量 题目描述 力扣200-岛屿数量 给你一个由 1(陆地)和 0(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此…

前端vue后端java使用easyexcel框架下载表格xls数据工具类

一 使用alibaba开源的 easyexcel框架&#xff0c;后台只需一个工具类即可实现下载 后端下载实现 依赖 pom.xml <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependen…

MATLAB-分类CPO-RF-Adaboost冠豪猪优化器(CPO)优化RF随机森林结合Adaboost分类预测(二分类及多分类)

MATLAB-分类CPO-RF-Adaboost冠豪猪优化器&#xff08;CPO&#xff09;优化RF随机森林结合Adaboost分类预测&#xff08;二分类及多分类&#xff09; 分类CPO-RF-Adaboost冠豪猪优化器&#xff08;CPO&#xff09;优化RF随机森林结合Adaboost分类预测&#xff08;二分类及多分类…

【web前端HTML+CSS+JS】--- HTML学习笔记01

学习链接&#xff1a;黑马程序员pink老师前端入门教程&#xff0c;零基础必看的h5(html5)css3移动端前端视频教程_哔哩哔哩_bilibili 学习文档&#xff1a; Web 开发技术 | MDN (mozilla.org) 一、前后端工作流程 WEB模型&#xff1a;前端用于采集和展示信息&#xff0c;中…

Web漏洞扫描工具AppScan与AWVS测评及使用体验

AppScan和AWVS业界知名的Web漏洞扫描工具&#xff0c;你是否也好奇到底哪一个能力更胜一筹呢&#xff1f;接下来跟随博主一探究竟吧。 1. 方案概览 第一步&#xff1a;安装一个用于评测的Web漏洞靶场&#xff08;本文采用最知名和最广泛使用的靶场&#xff0c;即OWASP Benchma…