¡Realice una clasificación de puntuación de juegos en línea basada en Redis! ¡Experimente el servidor en la nube!

Obtenga una clasificación de puntuación de juegos en línea basada en Redis

Dirección de experiencia: https://developer.aliyun.com/adc/scenario/44d54481170f4914996d3ae53b818f32?spm=a2c6h.15013979.J_7591448770.47.60ff7077owk8FW

Objetivo de experiencia

Este escenario proporcionará una instancia ECS (servidor en la nube) configurada con CentOS 7.7 y una instancia de base de datos Redis 5.0. Mediante el funcionamiento de este tutorial, puede utilizar el lenguaje Java para implementar la función de clasificación de puntuación de jugador de juegos basada en la base de datos de Redis.

conocimiento de fondo

  • Redis

Redis es una base de datos de clave-valor basada en registros de código abierto escrita en lenguaje ANSI C, que cumple con el protocolo BSD, admite la red, basada en memoria o persistente, y proporciona API en varios idiomas. Por lo general, se denomina servidor de estructura de datos porque el valor puede ser de cadena, hash, lista, conjuntos y conjuntos ordenados. ZSet (conjuntos ordenados) es un conjunto ordenado. HashMap y SkipList se utilizan internamente para garantizar el almacenamiento ordenado de los datos. HashMap contiene la asignación de miembros a Score, mientras que la tabla de omisión almacena todos los miembros., La base de clasificación es la puntuación almacenada en el HashMap, y la estructura de la tabla de salto pueden obtener una eficiencia de búsqueda relativamente alta, y la implementación es relativamente simple. La tabla de clasificación es un escenario de uso clásico de una colección ordenada. Por ejemplo, los sitios web como los videos novedosos deben clasificar los videos novedosos subidos por los usuarios. La lista se puede clasificar según la cantidad de atención de los usuarios, el tiempo de actualización y el recuento de palabras.

  • ApsaraDB para Redis

ApsaraDB para Redis es un servicio de base de datos que es compatible con el estándar de protocolo Redis de código abierto y proporciona un método de almacenamiento híbrido de memoria y disco duro. Se basa en una arquitectura de reserva en caliente de sistema dual altamente confiable y una arquitectura de clúster escalable sin problemas para cumplir escenarios de alto rendimiento de lectura y escritura Y las necesidades comerciales de una asignación flexible.

  • Apache Maven

Maven es una herramienta de gestión de proyectos de código abierto de Apache. Incluye un modelo de objeto de proyecto, un conjunto de estándares, un ciclo de vida del proyecto, un sistema de gestión de dependencias y ejecutar la lógica que define el objetivo del complemento en la fase del ciclo de vida. Sin embargo, debido a que los almacenes extranjeros a menudo no pueden conectarse, incluso si están conectados, la velocidad de descarga es muy lenta. Alibaba Cloud proporciona un almacén espejo oficial basado en Maven. El almacén espejo utiliza OSS (almacenamiento de objetos) como almacenamiento de back-end, que tiene velocidades de descarga rápidas, admite alta concurrencia y todo el sitio está encriptado con HTTPS, que es más seguro. .

Catálogo de aprendizaje

  • Detalles del experimento
    1. Crea recursos
    1. Conectarse al servidor ECS
    1. Construye un entorno Java
    1. Desarrollar la función de clasificación de puntos del jugador del juego

Crea recursos

  1. En el lado izquierdo de la página, haga clic en el menú desplegable de recursos de productos en la nube para ver los recursos de este experimento.

  2. Haga clic en el botón de apertura libre para crear los recursos necesarios.

El proceso de creación de recursos tarda de 1 a 3 minutos. Cuando termine de crear los recursos experimentales, puede ver la información del recurso en la nube que ha creado una lista, como: dirección IP, nombre de usuario y contraseña.

Conectarse al servidor ECS

  1. Abra la herramienta de terminal.
  • Windows: abre una ventana de comandos.
  • MAC: Abra la terminal de la línea de comandos Terminal.

Para los usuarios de Windows, compruebe si la herramienta SSH está instalada en el sistema. Método de inspección:

Ingrese el comando ssh -V en la terminal.

ssh -V

Si se muestra la versión SSH, significa que se ha instalado, como se muestra en la siguiente figura.

img

Si no está instalado, descargue e instale la herramienta OpenSSH .

  1. Ingrese el comando de conexión ssh [nombre de usuario] @ [ipaddress] en la terminal.

Debe reemplazar el nombre de usuario y la dirección IP con la IP pública elástica del servidor ECS creado en el paso 1. P.ej:

ssh [email protected]

img

Los resultados de la pantalla de comandos son los siguientes:

img

  1. Ingrese sí.

  2. Después de aceptar continuar, se le pedirá que ingrese la contraseña de inicio de sesión. La contraseña es la contraseña de inicio de sesión del ECS del servicio en la nube creado.

img

Después de iniciar sesión correctamente, se mostrará la siguiente información.

img

Construye un entorno Java

En este paso, se configurará un entorno de desarrollo Java en el servidor ECS, incluidos OpenJDK 1.8 y Maven 3.6.3, y se configurará el almacén espejo de Alibaba Cloud.

Pasos:

  1. Instale OpenJDK 1.8.
yum -y install java-1.8.0-openjdk-devel.x86_64
  1. Descarga el paquete de instalación de Maven.
wget https://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
  1. Descomprima el paquete de instalación descargado en el directorio / usr / local / y cambie el nombre del directorio de instalación.
tar -zxvf apache-maven-3.6.3-bin.tar.gz -C /usr/local/ &&
mv /usr/local/apache-maven-3.6.3/ /usr/local/maven
  1. Agregue el directorio de archivos ejecutables de Maven a las variables de entorno del sistema y use el comando de origen para que el contenido del archivo / etc / profile sea efectivo de inmediato.
echo "export PATH=$PATH:/usr/local/maven/bin" >> /etc/profile
source /etc/profile
  1. Ejecute el siguiente comando para abrir el archivo de configuración del almacén espejo y agregue la configuración del almacén espejo de Alibaba Cloud.

Utilice vim para abrir el archivo de configuración del repositorio espejo.

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

b. Después de ingresar a la página del editor de vim, ingrese: / mirrors, busque y salte a la ubicación de la etiqueta.

c. Presione la tecla n para saltar a la segunda posición de la etiqueta que no está anotada.

d. Presione la tecla o para comenzar una nueva línea para editar y pegue el siguiente contenido.

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

e. Presione ECS para salir del modo de edición, ingrese: wq para guardar y salir del editor vim.

Agregue la configuración del almacén de imágenes de Alibaba Cloud como se muestra a continuación:

img

Desarrollar la función de clasificación de puntos del jugador del juego

Pasos:

  1. Ejecute los siguientes comandos para crear e ingresar al espacio de trabajo.
mkdir -p demo/src/main/java/test/ && cd demo
  1. Consulte los siguientes pasos para editar el archivo de código.

a. Utilice vim para abrir el archivo GameRankSample.java.

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

b. Enter: configure pegar y presione la tecla i para ingresar al modo de inserción de pegado de vim, y agregue el siguiente contenido.

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. Presione la tecla ESC para salir del modo de inserción de pegado, y luego ingrese: configure nopaste y presione la tecla i para ingresar al modo de inserción normal de vim, y reemplace las variables de host y contraseña en el código con el valor de la barra de recursos a la izquierda La plataforma de experiencia proporciona la dirección de la intranet **** de Redis y la contraseña de Redis .

d) Presione la tecla ESC para salir del modo de edición, ingrese al modo de comando e ingrese el comando: wq, guarde y salga de vim.

  1. Consulte los siguientes pasos para crear un archivo de configuración pom.xml.

a. Utilice vim para abrir el archivo pom.xml.

vim pom.xml

b. Presione la tecla i para ingresar al modo de edición de vim y agregue el siguiente contenido:

<?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>
        
ion>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>assembly</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        

Supongo que te gusta

Origin blog.csdn.net/weixin_43314519/article/details/113745591
Recomendado
Clasificación