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)一起被存储,这使得你可以按照分数对集合进行排序。
常用命令
-
ZADD key score member [score member …]
- 描述:将一个或多个成员元素及其分数加入到有序集合中,如果成员元素已经存在,则更新其分数。
- 示例:
ZADD leaderboard 100 player1 200 player2
-
ZCARD key
- 描述:返回有序集合的基数(元素数量)。
- 示例:
ZCARD leaderboard
-
ZCOUNT key min max
- 描述:计算在有序集合中指定区间分数的成员数。
- 示例:
ZCOUNT leaderboard 100 200
-
ZRANGE key start stop [WITHSCORES]
- 描述:返回有序集合中指定范围的成员,可以包含分数。
- 示例:
ZRANGE leaderboard 0 10 WITHSCORES
-
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
- 描述:返回有序集合中指定分数区间的成员,可以包含分数。
- 示例:
ZRANGEBYSCORE leaderboard 100 200 WITHSCORES LIMIT 0 10
-
ZREVRANGE key start stop [WITHSCORES]
- 描述:返回有序集合中指定范围的成员,按分数降序排列,可以包含分数。
- 示例:
ZREVRANGE leaderboard 0 10 WITHSCORES
-
ZREMRANGEBYRANK key start stop
- 描述:移除有序集合中指定排名范围的成员。
- 示例:
ZREMRANGEBYRANK leaderboard 0 10
-
ZREMRANGEBYSCORE key min max
- 描述:移除有序集合中指定分数范围的成员。
- 示例:
ZREMRANGEBYSCORE leaderboard 100 200
-
ZREM key member [member …]
- 描述:移除有序集合中的一个或多个成员。
- 示例:
ZREM leaderboard player1
-
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有序集合
💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝Ὁ…...

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来实现截图,实例代码如下:…...

以腾讯为例,手把手教你搭建产品帮助中心
一个精心设计的产品帮助中心对于提高用户满意度和体验至关重要。腾讯,作为全球领先的互联网企业,通过其多样化的产品线(包括微信、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文件中加入新的字体图标
前言:在阿里图标库中,如果你没有这个字体图标的线上项目,那么你怎么在本地项目中的原始图标文件中添加新的图标呢? 背景:现有一个vue项目,下面是这个前端项目的字体图标文件。现在需要新开发功能页&#x…...

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

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

InspireFace-商用级的跨平台开源人脸分析SDK
InspireFace-商用级的跨平台开源人脸分析SDK InspireFaceSDK是由insightface开发的⼀款⼈脸识别软件开发⼯具包(SDK)。它提供了⼀系列功能,可以满⾜各种应⽤场景下的⼈脸识别需求,包括但不限于闸机、⼈脸⻔禁、⼈脸验证等。 该S…...
华为HCIP Datacom H12-821 卷24
1.单选题 企业大楼有大量员工通常都在上班时在大厅开始接入到公司的WLAN网络,随着每位员工走到各自的工位过程中,每个人的移动端叶通过漫游的方式漫游到各自的网络覆盖区域。为了尽量保证每个终端的IP地址是固定的,建议的做法是? A、配置VLAN Pool并配置顺序算法 B、…...

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

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

论文回顾 | CVPR 2021 | How to Calibrate Your Event Camera | 基于图像重建的事件相机校准新方法
论文速览 | CVPR 2021 | How to Calibrate Your Event Camera | 基于图像重建的事件相机校准新方法 1 引言 在计算机视觉和机器人领域,相机校准一直是一个基础而又重要的问题。传统的相机校准方法主要依赖于从已知校准图案中提取角点,然后通过优化算法求解相机的内参和外参。这…...
高级java每日一道面试题-2024年7月1日
题目:请解释 Java 中的内存泄漏,并说明如何检测和避免内存泄漏。 答案: 内存泄漏指的是程序中不再使用的对象,由于某些原因没有被垃圾回收器回收,仍然占据着内存空间,导致可用内存逐渐减少,最…...

当需要对多个表进行联合更新操作时,怎样确保数据的一致性?
文章目录 一、问题分析二、解决方案三、示例代码(以 MySQL 为例)四、加锁机制示例五、测试和验证六、总结 在数据库管理中,经常会遇到需要对多个表进行联合更新的情况。这种操作带来了一定的复杂性,因为要确保在整个更新过程中数据…...
数据结构-线性表的应用
目录 前言一、有序表的合并1.1 顺序表实现1.2 单链表实现 二、稀疏多项式的相加和相乘2.1 稀疏多项式的相加2.2 稀疏多项式的相乘 总结 前言 本篇文章介绍线性表的应用,分别使用顺序表和单链表实现有序表的合并,最后介绍如何使用单链表实现两个稀疏多项…...
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…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...

Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...