当前位置: 首页 > 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 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

http://www.lryc.cn/news/393221.html

相关文章:

  • Servlet与Servlet容器
  • 腾讯centos mysql安装
  • c_各个unsigned int 和 int的取值范围
  • C#/WPF 自制截图工具
  • 以腾讯为例,手把手教你搭建产品帮助中心
  • 计算机网络概述--自我学习用
  • 超级好用的java http请求工具
  • 在原有的iconfont.css文件中加入新的字体图标
  • 使用 ESP32-WROOM + DHT11 做个无屏温湿度计
  • 如何使用 SwiftUI 构建 visionOS 应用
  • InspireFace-商用级的跨平台开源人脸分析SDK
  • 华为HCIP Datacom H12-821 卷24
  • TikTok马来西亚直播网络怎么配置?
  • 基于若依的文件上传、下载
  • 论文回顾 | CVPR 2021 | How to Calibrate Your Event Camera | 基于图像重建的事件相机校准新方法
  • 高级java每日一道面试题-2024年7月1日
  • 当需要对多个表进行联合更新操作时,怎样确保数据的一致性?
  • 数据结构-线性表的应用
  • cpp http server/client
  • 昇思25天学习打卡营第2天|MindSpore快速入门
  • django之url路径
  • 【OnlyOffice】桌面应用编辑器,插件开发大赛,等你来挑战
  • [学习笔记]SQL学习笔记(连载中。。。)
  • Buuctf之SimpleRev做法
  • 【云原生监控】Prometheus 普罗米修斯从搭建到使用详解
  • 【C++】模板进阶--保姆级解析(什么是非类型模板参数?什么是模板的特化?模板的特化如何应用?)
  • Cookie与Session
  • Nuxt3 的生命周期和钩子函数(十一)
  • Windows ipconfig命令详解,Windows查看IP地址信息
  • 在C#/Net中使用Mqtt