【C#与Redis】--实践案例--案例 3:使用 Redis 实现排行榜

news/2024/11/9 5:14:55/

实现一个基本的排行榜系统通常涉及到对分数进行排序,而 Redis 的 Sorted Set 数据结构非常适合这种用途。以下是一个使用 StackExchange.Redis 库在 C# 中实现排行榜的简单案例:

  1. 安装 StackExchange.Redis 库:
Install-Package StackExchange.Redis
  1. 创建一个排行榜管理器类:
using StackExchange.Redis;
using System;public class RedisLeaderboardManager
{private readonly Lazy<ConnectionMultiplexer> _lazyConnection;public RedisLeaderboardManager(string connectionString){_lazyConnection = new Lazy<ConnectionMultiplexer>(() =>{return ConnectionMultiplexer.Connect(connectionString);});}private IDatabase GetDatabase(){return _lazyConnection.Value.GetDatabase();}public void AddScore(string leaderboardKey, string member, double score){var database = GetDatabase();database.SortedSetAdd(leaderboardKey, member, score);}public double GetScore(string leaderboardKey, string member){var database = GetDatabase();return database.SortedSetScore(leaderboardKey, member) ?? 0;}public long GetRank(string leaderboardKey, string member, bool highToLow = true){var database = GetDatabase();long? rank;if (highToLow){rank = database.SortedSetRank(leaderboardKey, member, Order.Descending);}else{rank = database.SortedSetRank(leaderboardKey, member);}return rank ?? -1; // -1 indicates that the member is not in the leaderboard}public SortedSetEntry[] GetTopPlayers(string leaderboardKey, long startRank, long stopRank, bool highToLow = true){var database = GetDatabase();Order order = highToLow ? Order.Descending : Order.Ascending;return database.SortedSetRangeByRankWithScores(leaderboardKey, startRank, stopRank, order);}
}
  1. 在你的应用程序中使用排行榜:
class Program
{static void Main(){// 替换为你的 Redis 服务器连接字符串string redisConnectionString = "your_redis_connection_string";var leaderboardManager = new RedisLeaderboardManager(redisConnectionString);// 示例排行榜键string leaderboardKey = "game_leaderboard";// 模拟玩家分数leaderboardManager.AddScore(leaderboardKey, "player1", 1000);leaderboardManager.AddScore(leaderboardKey, "player2", 800);leaderboardManager.AddScore(leaderboardKey, "player3", 1200);// 获取玩家分数和排名double player1Score = leaderboardManager.GetScore(leaderboardKey, "player1");Console.WriteLine($"Player1 Score: {player1Score}");long player1Rank = leaderboardManager.GetRank(leaderboardKey, "player1");Console.WriteLine($"Player1 Rank: {player1Rank}");// 获取排行榜前两名玩家SortedSetEntry[] topPlayers = leaderboardManager.GetTopPlayers(leaderboardKey, 0, 1);foreach (var player in topPlayers){Console.WriteLine($"{player.Element} - Score: {player.Score}");}Console.ReadLine();}
}

确保替换代码中的 your_redis_connection_string 为你的 Redis 服务器连接字符串。在这个案例中,我们使用 SortedSet 存储玩家分数,并通过不同的方法来获取分数、排名和排行榜的前几名玩家。你可以根据需要调整这些方法以满足具体业务需求。


http://www.ppmy.cn/news/1287127.html

相关文章

Springcloud Alibaba使用Canal将Mysql数据实时同步到Redis保证缓存的一致性

目录 1. 背景 2. Windows系统安装canal 3.Mysql准备工作 4. 公共依赖包 5. Redis缓存设计 6. mall-canal-service 1. 背景 canal [kənl] &#xff0c;译意为水道/管道/沟渠&#xff0c;主要用途是基于 MySQL 数据库增量日志解析&#xff0c;提供增量数据订阅和消费。其诞…

ElasticSearch Nested类型全文检索、聚合查询

ElasticSearch Nested类型全文检索、聚合查询 Nested类型全文检索 创建索引 PUT /products1 {"mappings": {"properties": {"fulltext": {"type": "text"},"name": {"type": "text","…

【2023 CCF 大数据与计算智能大赛】基于TPU平台实现超分辨率重建模型部署 基于FSRCNN的TPU平台超分辨率模型部署方案

2023 CCF 大数据与计算智能大赛 基于TPU平台实现超分辨率重建模型部署 基于FSRCNN的TPU平台超分辨率模型部署方案 WELL 刘渝 人工智能 研一 西安交通大学 中国-西安 1461003622qq.com 史政立 网络空间安全 研一 西安交通大学 中国-西安 1170774291qq.com 崔琳、张…

python的pywebio库给孩子做加减法数学题

效果展示 程序执行后&#xff0c;打开浏览器&#xff0c;展示一些100以内的加减法混合运算的数学题并输入答案后判断对错&#xff0c;这样倒是省了买教材的钱了。 在题目下方的框中&#xff0c;输入答案&#xff0c;然后点击提交后&#xff0c; 会输出结果 pywebio库介绍 安装…

《Git快速入门》Git分支

1.master、origin、origin/master 区别 首先搞懂git分支的一些名称区别&#xff1a; master &#xff1a; Git 的默认分支名字。它并不是一个特殊分支、跟其它分支完全没有区别。 之所以几乎每一个仓库都有 master 分支&#xff0c;是因为 git init 命令默认创建它&#xff0c…

dockerfile(from,maintainer,label,run,cmd,entrypoint,copy,add,env,arg,volume,expose,workdir,onbuild)

Dockerfile 关键字作用备注FROM指定父镜像指定dockerfile基于那个image构建MAINTAINER作者信息用来标明这个dockerfile谁写的LABEL标签用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看RUN执行命令执行一段命令 默认是/bin/sh…

助力智能车损计算,基于高精度YOLOv8开发构建智能化车辆受损区域分割检测识别分析系统

车辆受损评估本身有专业的评估流程&#xff0c;本文并不是要探究这块的内容&#xff0c;而是想要通过技术手段来对车辆受损区域的面积做自动化的计算&#xff0c;在前面的博文中我们已经有了相关的开发实践了&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《基于yo…

循环展开与Duff Device

本来想转一篇江南一散人&#xff08;原点技术&#xff09;的文章, 但觉得可以写得再简略一些&#xff0c;于是就写了个简化版本。不算原创&#xff0c;算是改写了一下吧&#xff0c;其中插入了一些笔者个人的补充、段落顺序调整以及简化。 1983年11月&#xff0c;一位叫Tom Du…