小白新手基于云数据库 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

  • 21
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csdn565973850

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值