跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 基于 Redis 实现在线游戏积分排行榜
未分類
24 9 月 2020

基于 Redis 实现在线游戏积分排行榜

基于 Redis 实现在线游戏积分排行榜

資深大佬 : chen887625as 0

介绍

本场景将介绍如何基于 Redis 数据库实现在线游戏中的游戏玩家积分排行榜功能。

背景知识

Redis Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型 Key-Value 数据库,并提供多种语言的 API 。它通常被称为数据结构服务器,因为值( value )可以是字符串( String )、哈希( Hash )、列表( list )、集合( sets ) 和有序集合( sorted sets )等类型。ZSet ( sorted sets )是一个有序的集合,内部使用 HashMap 和跳跃表( SkipList )来保证数据的有序存储,HashMap 里放的是成员到 Score 的映射,而跳跃表里存放的是所有的成员,排序依据是 HashMap 里存的 Score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。排行榜是有序集合的经典使用场景。例如小说视频等网站需要对用户上传的小说视频做排行榜,榜单可以按照用户关注数,更新时间,字数等打分,做排行。

Apache Maven Maven 是 Apache 开源的一个项目管理工具,它包含了一个项目对象模型 ( Project Object Model ),一组标准集合,一个项目生命周期( Project Lifecycle ),一个依赖管理系统( Dependency Management System ),和用来运行定义在生命周期阶段( phase )中插件( plugin )目标( goal )的逻辑。但是由于国外的仓库经常连接不上,即便是连接上,下载速度也很慢。阿里云提供了基于 Maven 官方的镜像仓库,镜像仓库采用 OSS (对象存储)作为后端存储,下载速度快,支持高并发,而且全站进行了 HTTPS 加密,更安全。

场景体验

提供一台配置了 CentOS 7.7 的 ECS 实例(云服务器)和一个 Redis 5.0 数据库实例。通过本教程的操作,您可以使用 Java 语言实现基于 Redis 数据库的游戏玩家积分排行榜功能。 阿里云 场景资源:(提供真实资源模拟) https://developer.aliyun.com/adc/scenario/44d54481170f4914996d3ae53b818f32

步骤一:搭建 Java 环境

本步骤将在 ECS 服务器上搭建一个 Java 开发环境,包括 OpenJDK 1.8 和 Maven 3.6.3,并配置阿里云镜像仓库。

操作步骤:

1.安装 OpenJDK 1.8 。

yum -y install java-1.8.0-openjdk-devel.x86_64 

2.下载 Maven 安装包。

wget https://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz 

3.将下载的安装包解压到 /usr/local/目录,并将安装目录重命名。

tar -zxvf apache-maven-3.6.3-bin.tar.gz -C /usr/local/ && mv /usr/local/apache-maven-3.6.3/ /usr/local/maven 

4.将 Maven 的可执行文件目录加入到系统环境变量中,并使用 source 命令使 /etc/profile 文件中的内容立即生效。

echo "export PATH=$PATH:/usr/local/maven/bin" >> /etc/profile source /etc/profile 

5.执行以下命令打开镜像仓库配置文件,添加阿里云镜像仓库配置。

a. 使用 vim 打开镜像仓库配置文件。

vim /usr/local/maven/conf/settings.xml 

b. 进入 vim 编辑器页面后输入 :/mirrors,搜索并跳转到 <mirrors> 标签的位置。

c. 按下 n 键跳转到第二个没有被注释的标签位置。

d. 按下 o 键,另起一行进行编辑,粘贴以下内容。

<mirror>        <id>nexus-aliyun</id>        <mirrorOf>central</mirrorOf>        <name>Nexus aliyun</name>        <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror> 

e. 按下 ECS 退出编辑模式,输入 :wq 保存并退出 vim 编辑器。

添加阿里云镜像仓库配置如下图所示: 基于 Redis 实现在线游戏积分排行榜

步骤二:开发游戏玩家积分排行榜功能

操作步骤:

1.执行以下命令创建并进入工作空间。

mkdir -p demo/src/main/java/test/ && cd demo 

2.参考以下步骤编辑代码文件。

a. 使用 vim 打开 GameRankSample.java 文件。

vim src/main/java/test/GameRankSample.java 

b. 输入:set paste 回车后按下 i 键进入 vim 的粘贴插入模式,新增以下内容。

package test; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.UUID; import redis.clients.jedis.Jedis; import redis.clients.jedis.Tuple; public class GameRankSample {     static int TOTAL_SIZE = 20;     public static void main(String[] args)      {         //Redis 数据库连接地址         String host = "xxxxxxxxxx.m.cnhz1.kvstore.aliyuncs.com";         //连接密码         String password = "password";         int port = 6379;         Jedis jedis = new Jedis(host, port);         try {             String authString = jedis.auth(password);             if (!authString.equals("OK"))             {                 System.err.println("AUTH Failed: " + authString);                 return;             }             //Key(键)             String key = "游戏名:奔跑吧,阿里!";             //清除可能的已有数据             jedis.del(key);             //模拟生成若干个游戏玩家             List<String> playerList = new ArrayList<String>();             for (int i = 0; i < TOTAL_SIZE; ++i)             {                 //随机生成每个玩家的 ID                 playerList.add(UUID.randomUUID().toString());             }             System.out.println("输入所有玩家 ");             //记录每个玩家的得分             for (int i = 0; i < playerList.size(); i++)             {                 //随机生成数字,模拟玩家的游戏得分                 int score = (int)(Math.random()*5000);                 String member = playerList.get(i);                 System.out.println("玩家 ID:" + member + ", 玩家得分: " + score);                 //将玩家的 ID 和得分,都加到对应 key 的 SortedSet 中去                 jedis.zadd(key, score, member);             }             //输出打印全部玩家排行榜             System.out.println();             System.out.println("       "+key);             System.out.println("       全部玩家排行榜                    ");             //从对应 key 的 SortedSet 中获取已经排好序的玩家列表             Set<Tuple> scoreList = jedis.zrevrangeWithScores(key, 0, -1);             for (Tuple item : scoreList) {                   System.out.println("玩家 ID:"+item.getElement()+", 玩家得分:"+Double.valueOf(item.getScore()).intValue());             }               //输出打印 Top5 玩家排行榜             System.out.println();             System.out.println("       "+key);             System.out.println("       Top 玩家");             scoreList = jedis.zrevrangeWithScores(key, 0, 4);             for (Tuple item : scoreList) {                   System.out.println("玩家 ID:"+item.getElement()+", 玩家得分:"+Double.valueOf(item.getScore()).intValue());             }             //输出打印特定玩家列表             System.out.println();             System.out.println("         "+key);             System.out.println("          积分在 1000 至 2000 的玩家");             //从对应 key 的 SortedSet 中获取已经积分在 1000 至 2000 的玩家列表             scoreList = jedis.zrangeByScoreWithScores(key, 1000, 2000);             for (Tuple item : scoreList) {                   System.out.println("玩家 ID:"+item.getElement()+", 玩家得分:"+Double.valueOf(item.getScore()).intValue());             }          } catch (Exception e) {             e.printStackTrace();         }finally{             jedis.quit();             jedis.close();         }     } } 

c. 按下 ESC 键退出粘贴插入模式,然后输入:set nopaste 回车后按下 i 键进入 vim 的普通插入模式,将代码中的 host 和 password 的变量的值替换为左侧资源栏体验平台提供给您的 Redis 内网地址 和 Redis 密码 。

d. 按下 ESC 键退出编辑模式,进入命令模式输入命令 :wq,保存并退出 vim 。

3.参考以下步骤创建 pom.xml 配置文件。

a. 使用 vim 打开 pom.xml 文件。

vim pom.xml 

b. 按下 i 键进入 vim 的编辑模式,新增以下内容:

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">     <modelVersion>4.0.0</modelVersion>     <groupId>test</groupId>     <artifactId>demo</artifactId>     <version>0.0.1-SNAPSHOT</version>     <name>demo</name>     <description>Demo project</description>      <properties>         <java.version>1.8</java.version>     </properties>      <dependencies>         <dependency>             <groupId>redis.clients</groupId>             <artifactId>jedis</artifactId>             <version>2.9.0</version>         </dependency>     </dependencies>      <build>         <plugins>             <plugin>                 <artifactId>maven-assembly-plugin</artifactId>                 <configuration>                     <appendAssemblyId>false</appendAssemblyId>                     <descriptorRefs>                         <descriptorRef>jar-with-dependencies</descriptorRef>                     </descriptorRefs>                     <archive>                         <manifest>                             <!--jar 入口类,格式 Package.ClassName -->                             <mainClass>test.GameRankSample</mainClass>                         </manifest>                     </archive>                 </configuration>                 <executions>                     <execution>                         <id>make-assembly</id>                         <phase>package</phase>                         <goals>                             <goal>assembly</goal>                         </goals>                     </execution>                 </executions>             </plugin>         </plugins>     </build> </project> 

c. 按下 ESC 键退出编辑模式,进入命令模式输入命令 :wq,保存并退出 vim 。

4.使用 maven 打包项目。

mvn assembly:assembly 

出现如下日志时表示打包成功: 基于 Redis 实现在线游戏积分排行榜

  1. 运行 jar 文件。
java -jar target/demo-0.0.1-SNAPSHOT.jar 

运行结果如下所示: 基于 Redis 实现在线游戏积分排行榜 以上就是《基于 Redis 实现在线游戏积分排行榜》,的所有内容了

体验本次的真实场景,真实环境可至 阿里云体验实验室 https://developer.aliyun.com/adc/labs/

大佬有話說 (8)

  • 資深大佬 : wysnylc

    好家伙,从盘古开天辟地开始教

  • 資深大佬 : littlewing

    培训班的教法?

  • 資深大佬 : jackcdd

    大佬 牛皮

  • 資深大佬 : dream4ever

    @wysnylc 哈哈哈哈要被你笑死

  • 資深大佬 : lake325

    完全可以分 2 个课时,然后附上精美 ppt

  • 資深大佬 : motecshine

    这狗比 是发软文的 cnm

  • 主 資深大佬 : chen887625as

    @motecshine 文章 都是阿里云体验实验室的内容, 欢迎建议反馈,这边会认真改正

  • 資深大佬 : Livid

    @motecshine 这个账号已经被彻底 ban 。所有的 spam 已经被移动到 /go/promotions 节点。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具