最近面试连续被问到游戏服排行榜如何实现,因为以前一直不觉得是个事,所以突然问到一脸懵逼,现在我自己总结一下。

目前工作中KE排行榜的实现
1.单服排行榜,直接用ruby on rails封装的查询语句实现(这个效率其实非常低,可以优化为redis排序)。
2.跨服排行榜-名人堂,设置了redis的缓存,24小时更新一次,从中心服拉数据,由于数据量小中心服接口内也是用的ruby on rails封装的查询语句实现。
3.跨服排行榜-异族,游戏服定期分批上报本服数据到中心服,存在redis中,设置了redis的缓存,超过50秒可以请求一次中心服,拉取最新排名,中心服接口使用redis来排名,使用了redis的zrevrange(从大到小)排序函数来实现。

公司新项目例如303(erlang写的)游戏排行榜实现
1.有一个单独的的排行榜服务器,内部使用redis实现排序(使用redis的排序集Sorted sets(有序集合),这个的数据结构是跳跃表+字典),单服,全服都在这个服上实现排序,游戏服有数据变动就上传排序服,这个服务器对外提供http服务,其他游戏服通过http请求来set或get分数,一般是玩家在看排行榜的时候才请求更新,平时不请求。
2.当然单服也可以直接在游戏服上实现,用redis排序,或者自己写个排序数据结构,绝对杜绝直接用数据库来排序。

朋友公司,golang游戏排行榜实现
1.单服的话用redis排序,或者找个库用skiplist(跳跃表)实现就行,不要用数据库排(这个效率太低)。
2.全服排行榜的话,建一个单独的排行榜服务器,用这个服务器对外提供http服务,其他游戏服通过http请求来set或get分数,排行榜服务器底层也是用的redis或者找个库用skiplist(跳跃表)实现。
3.排行榜一般会做个缓存,多久更新一次,这是优化范畴。比如是更新的话,可以实时更新,但是外面包一个nginx,然后在nginx上做一个静态的缓存,每一小时过期。

上个公司,golang游戏排行榜实现
在上个公司遇到个比较特别的项目,排行榜用的切片实现的,更新分数后,先取自己之前的排名(也就是切片的index,当然那个排名结构里面也要存一个),如果之前没有排名就先放到榜的最后,如果有就先跟排自己前面的比较分数,大的话就依次向前调换位置,完了以后再跟排自己后面的比较分数,小的话就往后排,直到排名更新。因为这个游戏排名数量要求不多(一般就要求排前1000或者前2000名),显示就显示前100名,所以没有用跳跃表或者redis排序。

游戏服排行榜实现(面试被问到)相关推荐

  1. 面试官问你为什么选择做客服_在线客户服务-您的选择

    面试官问你为什么选择做客服 On the Web, news travels fast - and a good customer testimonial is worth its weight in ...

  2. 游戏服务端框架之使用Redis实现跨服排行榜

    跨服排行榜 游戏里为了刺激玩家的攀比心理,经常有各种各样的排行榜.排行榜又可以分为本服排行榜以及跨服排行榜. 简单说来,本服排行榜上的记录来自本服的玩家,而跨服排行榜上的记录是来自所有服务器前N名玩家 ...

  3. 【高并发】关于乐观锁和悲观锁,蚂蚁金服面试官问了我这几个问题!!

    写在前面 最近,一名读者去蚂蚁金服面试,面试官问了他关于乐观锁和悲观锁的问题,幸亏他看了我的[高并发专题]文章,结果是替这名读者高兴!现就部分面试题目总结成文,供小伙伴们参考. 小伙伴们可以关注 冰河 ...

  4. 蚂蚁金服二面:面试官问我零拷贝的实现原理,当场跪。。。

    本文来源:占小狼的博客 "狼哥,面试又跪了,碰到了知识盲区" "哪个?" "一面还可以,二面面试官问我零拷贝的原理,懵逼了...这块内容没去研究过&q ...

  5. Redis面试连环问:集群、复制以及与其他NOSQL数据库的区别?

    欢迎关注方志朋的博客,回复"666"获面试宝典 前言 面试官问:您熟悉redis?搭建过redis集群?rediscluster底层的主从复制rdb如何工作的?-- 接下来,就是一 ...

  6. java面试所问到的问题和资料整理

    必备基础知识面向对象的特征 继承:从当前类继承另外一个类,当前类为子类,继承的类为父类,本质是对程序的扩展和延伸(extends)封装:编写一个类就是对数据的一种封装,封装为隐藏一切可隐藏的东西,只对 ...

  7. 手撸架构,Redis面试41问

    技术栈 传送门 JAVA 基础 手撸架构,Java基础面试100问_vincent-CSDN博客 JAVA 集合 手撸架构,JAVA集合面试60问_vincent-CSDN博客 JVM 虚拟机 手撸架 ...

  8. 面试阿里!妹子终面,阿里面试官问:有没有男朋友? 结果...

    点击"开发者技术前线",选择"星标????" 在看|星标|留言,  真爱 作者:  前线小熙  | 责编: 可可   来源 :开发者技术前线  刚好要到端午节前 ...

  9. 测开工程师-面试常问测试用例

    测开工程师-面试常问测试用例 一.网络测试的一般流程 二.弱网功能测试 四.微信红包测试 五.无网状态测试 三.微信朋友圈点赞测试 六.登陆界面测试 七.直播APP测试 八.微信搜索界面测试 九.水杯 ...

最新文章

  1. 教学思路SQL之入门习题《学员成绩》 一、建表
  2. java 模拟实现mq,RabbitMQ的5种模式,并使用java进行模拟操作
  3. linux性能优化实战-内存性能指标
  4. Spring boot添加员工
  5. linux常见紧急情况处理
  6. [C++]MySQL数据库操作实例
  7. circlegan_【源码解读】cycleGAN(二) :训练
  8. 幼儿课外活动游戏_泰国清迈大小学校介绍 --【Little Star小星星幼儿园】
  9. matlab tf-idf,java 兑现tfidf
  10. Solr删除managedschema
  11. 安全专家:70GB财务数据被僵尸网络盗窃
  12. 【论文笔记】Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
  13. Netty 网络框架概述 与 快速入门
  14. 计算机cpu占用率高,CPU占用率高的原因及解决方法
  15. 僵尸网络_僵尸网络钓鱼
  16. Golang sqlx 使用 Where in 解决办法
  17. CF 1696 E. Placing Jinas 组合数 2000
  18. 第一个安卓app应用的开发--环境配置和第一项目创建
  19. Vue仿网易云音乐播放器(二)
  20. 投资理财-朋友好像的故事

热门文章

  1. AWS EKS ALB使用场景(持续更新)
  2. Win10提示已禁用IME不能输入中文
  3. 麓言信息专业ui设计
  4. FreeForm和composite中插入子报表的区别
  5. 优秀课程案例:使用Scratch制作吃豆人经典版!
  6. win7修复计算机无法修复工具栏,win7系统鼠标点不了下面任务栏的修复办法
  7. QGIS添加自定义点状符号库
  8. SecureCRT和Xshell 连接交换机的步骤
  9. Windows7中出现的KERNELBASE.dll错误的解决方法
  10. 前方一大波热门岗位来袭!多家知名互联网公司招聘Cocos人才,全国多地有岗...