小白新手基于云数据库 Redis 搭建 游戏排行榜
免费试用
在开始搭建游戏排行榜之前,我们首先需要领取阿里云社区为我们准备的免费资源,比如云数据库 Redis 版免费试用
点击【立即试用】弹窗试用页面,注意这里需要选择【杭州可用区I】,专有网络选择第一个,虚拟交换机会自动选中的
剩下的都不用动,默认即可,滑到开通服务页面的最下端
勾选协议,点击【立即试用】即可免费开通云数据库 Redis 版。
搭建游戏排行榜
开通了云数据库Redis版服务之后就可以基于Redis搭建游戏排行榜了,实验室地址:基于Redis实现在线游戏积分排行榜,实验室首页
点击【立即开始】
搭建基础环境JDK、Maven
安装JDK
安装OpenJDK 1.8,执行命令
yum -y install java-1.8.0-openjdk-devel.x86_64
安装完成后执行命令查看是否安装成功
java -version
安装Maven
下载Maven安装包,执行命令
wget --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz
解压Maven安装包到指定/user/local目录下并重命名
tar -zxvf apache-maven-3.8.8-bin.tar.gz -C /usr/local/ && mv /usr/local/apache-maven-3.8.8/ /usr/local/maven
添加Maven启动命令到环境变量中
echo "export PATH=$PATH:/usr/local/maven/bin" >> /etc/profile
source /etc/profile
配置Maven镜像仓库地址
vim /usr/local/maven/conf/settings.xml
添加镜像仓库地址
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
部署游戏排行榜
创建demo文件夹并切换到demo文件夹下
mkdir -p demo/src/main/java/test/ && cd demo
创建并编辑Java类文件GameRankSample.java
vim src/main/java/test/GameRankSample.java
粘贴提前准备好的测试代码内容
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();
}
}
}
代码中host需要替换为:Redis的内网地址
password需要替换为:Redis密码
替换完成之后创建pom.xml文件
vim pom.xml
粘贴pom.xml内容
<?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>
执行Maven打包命令
mvn clean package assembly:single -DskipTests
通过java -jar命令运行类
java -classpath target/demo-0.0.1-SNAPSHOT.jar test.GameRankSample
运行结果如图
到这里我们基于云数据库Redis 版搭建实时在线游戏积分榜的操作就完成了,实验的结果也很有效果。
写在最后
操作感受
虽然我们这次是基于实验室的基础上进行的云数据库Redis的操作,但是我们从另一个方面可以看到Redis在获取排序数据时的效率,整个过程中代码命令也很简单,只需一个命令jedis.zrevrangeWithScores(key, 0, -1) 即可以获取到排好序的玩家信息,无需进行过多的操作即可达到目的,从实用性和操作性上很简单,学习成本比较低,更容易尽快的融入业务系统中去。整个操作过程比较流畅,没有卡顿,只是在进行Maven解压及重命名操作过程中,实验室提供的命令版本号是错误的,修改后即可,其他的操作命令整体上和平时用的无异,操作顺畅,没有问题。
其他应用
作为云数据库Redis版,那么现下的公司用的开源的Redis都可以用云数据库Redis版来替代的,不但可以省去大量的运维成本,还可以获得更好的NoSQL体验;另外作为内存级数据库,可以作为缓存加速应用访问,比如缓存登录信息,或者缓存访问量较大且不易变化的通知信息等。另外在电商场景的秒杀场景,云数据库Redis版可以直接用来缓存秒杀数据,提高响应效率,提高服务的稳定性等。
活动推广:https://developer.aliyun.com/huodong/dashiblogger?userCode=fkssw94w
标签:数据库,Redis,System,玩家,jedis,println,新手,out From: https://blog.csdn.net/csdn565973850/article/details/140119628