社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
如上图: 在游戏中经常涉及到排名问题.
在排名中涉及到根据某一个值或者多个值进行排行,需求中经常涉及到:
1- 从N名到M名是哪些玩家???
2- 玩家A的排名是多少名???
3- 排名N玩家的积分是多少???
上图中需求排行的数据仅仅有 玩家名称,名次,积分,在游戏中涉及到玩家在线数据的实时更新和离线数据,数据量大而且要求及时,必须结合内存排序和数据库排序.
对于使用多种语言C++/Lua 混合编程的团队来说,并不是每一个人都能快速 准确 的完成这个需求.如果引入Redis ,就能很合适的解决上述问题.
下面代码段,模拟解决上述问题.
//使用Redis Sorted Set 解决游戏中排行榜问题
Jedis jedis = new Jedis("localhost");
//比如坐骑排行榜,需求中仅仅设计排名问题.
jedis.zadd("HouseRank", Math.random(), "UserName_House_1");
jedis.zadd("HouseRank", Math.random(), "UserName_House_2");
jedis.zadd("HouseRank", Math.random(), "UserName_House_3");
jedis.zadd("HouseRank", Math.random(), "UserName_House_4");
//获取指定区间排名
Set<String> fset = jedis.zrange("HouseRank", 1, 1);
for (String s : fset) {
System.out.println(s);
}
//获取指定成员排名
Long rank = jedis.zrank("HouseRank", "UserName_House_4");
System.out.println("score:"+rank);
//获取指定成员分数
Double score = jedis.zscore("HouseRank", "UserName_House_4");
System.out.println("score:"+score);
jedis.disconnect();
很简单就能完成上述需求,是因为Redis 提供了Sorted Set 和持久化功能,很灵活解决了游戏中在线玩家和离线玩家数据排行有关需求.
把Redis 组件加入游戏服务器端后,对应类似需求,可以快速正确完成.省下来的时候,可以更好的生活了.
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!