基于Redis实现在线游戏积分排行榜

体验地址:https://developer.aliyun.com/adc/scenario/44d54481170f4914996d3ae53b818f32?spm=a2c6h.15013979.J_7591448770.47.60ff7077owk8FW

体验目标

本场景将提供一台配置了CentOS 7.7的ECS实例(云服务器)和一个Redis 5.0数据库实例。通过本教程的操作,您可以使用Java语言实现基于Redis数据库的游戏玩家积分排行榜功能。

背景知识

  • Redis

Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets) 和有序集合(sorted sets)等类型。ZSet(sorted sets)是一个有序的集合,内部使用HashMap和跳跃表(SkipList)来保证数据的有序存储,HashMap里放的是成员到Score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的Score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。排行榜是有序集合的经典使用场景。例如小说视频等网站需要对用户上传的小说视频做排行榜,榜单可以按照用户关注数,更新时间,字数等打分,做排行。

  • 云数据库Redis版

云数据库Redis版(ApsaraDB for Redis)是兼容开源Redis协议标准、提供内存加硬盘的混合存储方式的数据库服务,基于高可靠双机热备架构及可平滑扩展的集群架构,满足高读写性能场景及弹性变配的业务需求。

  • Apache Maven

Maven是Apache开源的一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。但是由于国外的仓库经常连接不上,即便是连接上,下载速度也很慢。阿里云提供了基于Maven官方的镜像仓库,镜像仓库采用OSS(对象存储)作为后端存储,下载速度快,支持高并发,而且全站进行了HTTPS加密,更安全。

学习目录

  • 实验详情
    1. 创建资源
    1. 连接ECS服务器
    1. 搭建Java环境
    1. 开发游戏玩家积分排行榜功能

创建资源

  1. 在页面左侧,单击 云产品资源 下拉菜单,查看本次实验资源。

  2. 单击 免费开通 创建所需资源。

资源创建过程需要1~3分钟。完成实验资源的创建后,您可以在 云产品资源 列表查看已创建的资源信息,例如:IP地址、用户名和密码等。

连接ECS服务器

  1. 打开终端工具。
  • Windows:打开命令窗口。
  • MAC:打开命令行终端Terminal。

Windows用户请检查系统中是否安装有SSH工具。检查方法:

在终端中输入命令 ssh -V 。

ssh -V

如果显示SSH版本则表示已安装,如下图所示。

如果未安装,请下载安装 OpenSSH工具。

  1. 在终端中输入连接命令ssh [username]@[ipaddress]。

您需要将其中的username和ipaddress替换为步骤一中创建的ECS服务器的弹性公网IP。例如:

ssh root@123.123.123.123

命令显示结果如下:

  1. 输入yes。

  2. 同意继续后将会提示输入登录密码。 密码为已创建的云服务的ECS的登录密码。

登录成功后会显示如下信息。

搭建Java环境

本步骤将在ECS服务器上搭建一个Java开发环境,包括OpenJDK 1.8和Maven 3.6.3,并配置阿里云镜像仓库。

操作步骤:

  1. 安装OpenJDK 1.8。
yum -y install java-1.8.0-openjdk-devel.x86_64
  1. 下载Maven安装包。
wget https://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
  1. 将下载的安装包解压到/usr/local/目录,并将安装目录重命名。
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. 将Maven的可执行文件目录加入到系统环境变量中,并使用source命令使/etc/profile文件中的内容立即生效。
echo "export PATH=$PATH:/usr/local/maven/bin" >> /etc/profile
source /etc/profile
  1. 执行以下命令打开镜像仓库配置文件,添加阿里云镜像仓库配置。

a. 使用vim打开镜像仓库配置文件。

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

b. 进入vim编辑器页面后输入 :/mirrors ,搜索并跳转到 标签的位置。

c. 按下 n 键跳转到第二个没有被注释的标签位置。

d. 按下 o 键,另起一行进行编辑,粘贴以下内容。

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

e. 按下 ECS 退出编辑模式,输入 :wq 保存并退出vim编辑器。

添加阿里云镜像仓库配置如下图所示:

开发游戏玩家积分排行榜功能

操作步骤:

  1. 执行以下命令创建并进入工作空间。
mkdir -p demo/src/main/java/test/ && cd demo
  1. 参考以下步骤编辑代码文件。

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){//随机生成每个玩家的IDplayerList.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的普通插入模式,将代码中的 hostpassword的变量的值替换为左侧资源栏体验平台提供给您的 Redis内网****地址Redis密码

d. 按下 ESC 键退出编辑模式,进入命令模式输入命令 :wq,保存并退出vim。

  1. 参考以下步骤创建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>ion><id>make-assembly</id><phase>package</phase><goals><goal>assembly</goal></goals></execution></executions></plugin>

基于Redis实现在线游戏积分排行榜!体验一下云服务器!相关推荐

  1. apache在线升级yum_基于Redis实现在线游戏积分排行榜 - phyger

    介绍 本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能. 背景知识 Redis Redis是一个开源的使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化 ...

  2. 基于Redis实现在线游戏积分排行榜

    介绍 本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能. 背景知识 Redis Redis是一个开源的使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化 ...

  3. 云起实验室:基于Redis实现在线游戏积分排行榜

    本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能. 点击立即参与云产品场景体验https://developer.aliyun.com/adc/scenario/44d544 ...

  4. 1元体验京东云服务器

    1元体验京东云服务器 在大神鸿洋和郭霖的微信公众号推送文章发现了这个好消息,第一时间注册了账号,申请下了订单,毕竟数量有限.尽管两位大神讲的很详细,无奈没有接错过CentOS.Ubuntu.Windo ...

  5. 对基于ubuntu18.04搭建双线adsl路由器和私有云服务器(samba、ftp和http)一文的更正2

    在<基于ubuntu18.04搭建双线adsl路由器和私有云服务器(samba.ftp和http)>一文中对于adsl断线重拨后自动更新路由表的脚本,少了自动平衡双线adsl流量的命令,将 ...

  6. 带你读懂什么是云服务器,游戏网站需要什么样的云服务器?

    云服务器是什么? 云服务器就是一种简单高效.安全可靠.处理能力可弹性伸缩的计算服务,用户无需提前购买硬件,即可迅速创建或释放任意多台云服务器. 云服务器具有与典型服务器类似的功能,独立提供计算.存储. ...

  7. 对基于ubuntu18.04搭建双线adsl路由器和私有云服务器(samba、ftp和http)一文的更正

    在<基于ubuntu18.04搭建双线adsl路由器和私有云服务器(samba.ftp和http)>一文中有两处错误,更正如下: 1)"7b. 配置双线adsl路由表" ...

  8. 云服务器流量是什么东西_在线科普,买一台云服务器到底能干嘛?

    很多行业外的用户可能会有这样的疑问,买一台云服务器来到底能做些什么,今天队长就科普一下云服务器的应用场景. 云服务器应用非常广泛,既可以作为简单的 Web 服务器单独使用,也可以与其他云产品搭配提供强 ...

  9. 今日巨大福利,1元体验京东云服务器,附云服务器用法的完整教程

    记得是在2010年,那个时候我刚刚开始接触Android不久,Google也还没有离开中国.当时我在上大三,Google举办了一场Android应用开发中国大学生挑战赛,跃跃欲试的我就和同学组队一起参 ...

最新文章

  1. python3 的encode 和 decode
  2. 教你识别:虚拟内存和物理内存的区别
  3. 2017年10月31日结束Outlook 2007与Office 365的连接
  4. python 基础 9.0 安装MySQL-python-1.2.5客户端
  5. sob攻略超详细攻略_北海涠洲岛旅游超详细住宿攻略!!!
  6. AI应用开发实战系列之三:手写识别应用入门
  7. python pandas使用pipe管道增强代码可读性
  8. Python使用元类约束派生类中必须实现指定的成员
  9. 随想录(怎么阅读代码)
  10. 对double变量进行四舍五入并保留两位小数
  11. java的语法基础_JAVA语法基础1(入门手册)
  12. 题目:学习成绩 = 90分的同学用A表示,60 - 89分之间的用B表示,60分以下的用C表示
  13. ofo这事吧,其实也挺好的
  14. mc9.1编程教程入门_教程1-什么是编程?
  15. seata-order-service2006模块
  16. 多站点同服务器同IP网站架设(IIS)心得
  17. golang使用xlsx操纵excel浅析
  18. 多种固定资产盘点方式应对年终固定资产大盘点
  19. Windows 文件、目录操作编程 常用API
  20. Anaconda3+python3.7成功安装dlib-19.19.0库(稀里糊涂)

热门文章

  1. 通过宠物商店理解java面向对象
  2. 二代旅游网站CMS缓存列表
  3. 常见漏洞知识库(原理/场景/修复)
  4. hive使用适用场景_大数据入门:Hive应用场景
  5. 大数据学习之sqoop
  6. 2020海康校招(笔试+2轮面试)复盘
  7. Java之png图片工具类
  8. SCARA四轴机器人eye-to-hand手眼标定(九点标定)
  9. BeanDefinitionParsingException Configuration problem Unabl
  10. mysql 1236错误_mysql报1236错误解决方法