基于Redis实现在线游戏积分排行榜-2
- 开发游戏玩家积分排行榜功能
操作步骤:
- 执行以下命令创建并进入工作空间。
mkdir -p demo/src/main/java/test/ && cd demo
- 参考以下步骤编辑代码文件。
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。
- 参考以下步骤创建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>