Redis: 使用Sorted Set 解决游戏中有关排行问题 - Go语言中文社区

Redis: 使用Sorted Set 解决游戏中有关排行问题


 

 

如上图:  在游戏中经常涉及到排名问题.

在排名中涉及到根据某一个值或者多个值进行排行,需求中经常涉及到:

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 组件加入游戏服务器端后,对应类似需求,可以快速正确完成.省下来的时候,可以更好的生活了.

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/sunning9001/article/details/49102387
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 21:44:36
  • 阅读 ( 1168 )
  • 分类:Redis

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢