首页 > 数据库 >小白新手基于云数据库 Redis 搭建 游戏排行榜

小白新手基于云数据库 Redis 搭建 游戏排行榜

时间:2024-07-03 13:28:18浏览次数:19  
标签:数据库 Redis System 玩家 jedis println 新手 out

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

相关文章

  • 联想服务器阵列数据恢复Raid5/0/6数据库RaidZ/虚拟机
    针对联想服务器阵列数据恢复,特别是涉及RAID5/0/6、数据库RAIDZ以及虚拟机的情况一、RAID5/0/6数据恢复故障诊断确定故障类型:首先需要明确是RAID5/0/6阵列中的哪一部分出现故障,如硬盘掉线、阵列卡损坏、意外断电等。收集信息:记录服务器型号、RAID配置、硬盘序列号等关键......
  • 使用EF 连接 数据库 SQLserver、MySql 实现 CodeFirst
    1.新建项目,下载Nuget安装包创建项目需要注意几点,如果是基于.netframework的项目需要选择相应版本的EF,如果是跨平台则选择EFCore版本。我这里选择的是.netframework版本。红框里面是实现EFCodeFirst需要的包。对应的版本:EntityFramework6.3.0MySql.Data6.8......
  • 构建高效盲盒小程序:数据库设计、安全策略与性能优化
    在移动互联网时代,盲盒经济以其独特的魅力迅速崛起,成为连接消费者与商品的新桥梁。盲盒小程序作为这一趋势的载体,不仅要求用户体验流畅,还需确保数据安全与性能卓越。本文将从数据库设计、安全策略及性能优化三个方面,深入探讨如何构建一个高效、安全的盲盒小程序。一、数据库设......
  • 向量数据库横比
    1.Elasticsearch 是否开源:是,开源发布时间:2010年擅长领域:主要用于全文搜索和分析,通过插件或内置字段类型支持向量搜索,适用于日志分析、全文搜索、向量搜索等。社区热度:非常活跃,拥有庞大的用户和开发者社区,广泛应用于各种企业级应用。 2.Annoy 是否开源:是,开......
  • AI美食怪兽短视频玩法,月入过万新手也能做!
    这种通过AI技术将各地的特色美食转为具有形象生动、创意满满的怪兽制作成的短视频,发布在各大短视频平台上,可以吸引大量的人群观看,那今天就教大家如何使用免费的AI工具生成这类爆款视频,从而轻松达到月入过万的收益百度网盘请输入提取码百度网盘为您提供文件的网络备份、同......
  • redis - [05] Java & Redis
    题记部分 一、准备工作下载jedis.jar或者在maven配置文件中配置jar包依赖 二、连接redisimportredis.clients.jedis.Jedis;publicclassRedisJava{publicstaticvoidmain(String[]args){//连接本地的Redis服务Jedisjedis=newJed......
  • 解决 windows远程桌面报错“CredSSP加密数据库修正”
    在被远程的windows系统中执行以下步骤:win+r键-输入regedit回车找到路径HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters2.1CredSSP\Parameters如果不存在,右键System文件夹,选择“新建-项”,输入CredSSP,再右键CredSSP,新......
  • 数据库
    数据库【一】什么是数据库一种用于存储、组织和管理大量数据的系统,它将数据以一定的结构形式组织起来,并提供了一套标准的操作接口(如SQL语言),使得用户能够有效地查询、更新、插入和删除数据。【二】数据库的本质数据库其实就是一块基于网络通信的应用程序存储数据的基于TCP......
  • 数据库
    数据库基础知识,数据库基本概念和知识重点。一、数据库数据:是科学实验、检验、统计等所获得的和用于科学研究、技术设计、查证、决策等的数值。  在计算机系统中,信息是观念上的,各种字母、数字符号的组合、语音、图形、图像等统称为数据,数据经过加工后就成为信息。数据库......
  • Redis-分布式锁(基本原理和不同实现方式对比)
    文章目录1、基本原理2、不同实现方式1、基本原理分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行执行,这就是分布式锁的核心思路......