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

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 基于Redis实现在线游戏积分排行榜-2

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

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

操作步骤:

  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)
        {
            //随机生成每个玩家的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. 按下 ESC 键退出粘贴插入模式,然后输入:set nopaste 回车后按下i键进入vim的普通插入模式,将代码中的 host 和 password的变量的值替换为左侧资源栏体验平台提供给您的 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>
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
弹性计算 NoSQL Redis
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
430 0
|
存储 缓存 NoSQL
|
NoSQL Redis
Redis学习4:List数据类型、拓展操作、实现日志等
注意点:对存储空间的顺序进行分析!
Redis学习4:List数据类型、拓展操作、实现日志等
|
存储 NoSQL Redis
Redis学习3:hash类型操作、拓展操作、实现购物等
首先可以理解成一个redis里面有一个小的redis。同时要注意引入了一个field的名字。
Redis学习3:hash类型操作、拓展操作、实现购物等
|
缓存 NoSQL 安全
2021年你还不会Shiro?----10.使用redis实现Shiro的缓存
上一篇文章已经总结了使用ehCache来实现Shiro的缓存管理,步骤也很简单,引入依赖后,直接开启Realm的缓存管理器即可。如果使用Redis来实现缓存管理其实也是一样的,我们也是需要引入redis的依赖,然后开启缓存传入自定义的redis的缓存管理器就行。区别是我们需要为自定义的redis缓存管理器提供自定义的缓存管理类。这个缓存管理类中需要使用到redisTemplate模板,这个模板我们也是需要自己定义。
266 0
2021年你还不会Shiro?----10.使用redis实现Shiro的缓存
|
NoSQL Java 关系型数据库
浅谈Redis实现分布式锁
浅谈Redis实现分布式锁
|
存储 NoSQL 关系型数据库
「Redis」事务实现机制
Redis事务实现机制
555 0
|
消息中间件 设计模式 NoSQL
异步结果通知实现——基于Redis实现,我这操作很可以
前段时间,我在内存中实现了一个简单异步通知框架。但由于没有持久化功能,应用重启就会导致数据丢失,且不支持分布式和集群。今天这篇笔记,引入了 Redis 来解决这些问题,以下是几点理由: 数据结构丰富,支持 List、Sorted Set 等 具有持久化功能,消息的可靠性能得到保证 高可用性,支持单机、主从、集群部署 项目中已使用,接入成本更低 基于 Redis 实现延时队列也有几种方法,展开详细讲讲。
|
NoSQL 前端开发 PHP
thinkphp+redis实现秒杀功能
thinkphp+redis实现秒杀功能
249 0
thinkphp+redis实现秒杀功能
|
25天前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
60 1