redis 游戏玩家积分排行榜
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.8.0</version>
</dependency>
采用阿里云Redis
设置Redis实例的白名单,保障ECS实例和Redis实例可以互通。

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 = "r-bp1ah7x******.redis.rds.aliyuncs.com";
int port = 6379;
Jedis jedis = new Jedis(host, port);
try {
//实例密码
String authString = jedis.auth("##sysadmin****"); //password
if (!authString.equals("OK")) {
System.err.println("AUTH Failed: " + authString);
return;
}
//Key(键)
String key = "游戏名称:和平精英4排积分榜";
//清除可能的已有数据
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("Player ID:" + member + ", Player Score: " + score);
//将玩家ID和分数添加到相应键的SortedSet中。
jedis.zadd(key, score, member);
}
//输出打印全部玩家排行榜
System.out.println();
System.out.println(" " + key);
System.out.println("所有玩家排名");
System.out.println("--------------------------------------------");
//从对应key的SortedSet中获取已经排好序的玩家列表
Set<Tuple> scoreList = jedis.zrevrangeWithScores(key, 0, -1);
for (Tuple item : scoreList) {
System.out.println(
"Player ID:" +
item.getElement() +
", Player Score:" +
Double.valueOf(item.getScore()).intValue()
);
}
//输出打印前五名玩家的信息
System.out.println();
System.out.println(" " + key);
System.out.println(" 和平精英战神前十榜单");
scoreList = jedis.zrevrangeWithScores(key, 0, 9);
for (Tuple item : scoreList) {
System.out.println(
"Player ID:" +
item.getElement() +
", Player Score:" +
Double.valueOf(item.getScore()).intValue()
);
}
//输出打印特定玩家列表
System.out.println();
System.out.println(" " + key);
System.out.println(" 分数从 1,000 到 2,000 的玩家");
//从对应key的SortedSet中获取已经积分在1000至2000的玩家列表
scoreList = jedis.zrangeByScoreWithScores(key, 1000, 2000);
for (Tuple item : scoreList) {
System.out.println(
"Player ID:" +
item.getElement() +
", Player Score:" +
Double.valueOf(item.getScore()).intValue()
);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
jedis.quit();
jedis.close();
}
}
}
