话说我辉姐姐给我安排过一个面试题:
设计一个打飞机游戏,玩家可是实时查看朋友的排名,自己的分数情况,如何设计。
当初一开始的时候,我的思维还是停留在如何设计数据库表,如何构建一个朋友圈,确实这些也很重要。
但是其实辉爷想听的还更多的如何对排名分数进行存储,如何优化。
其实方案也很明显,在数据库和展示前面加一个redis做缓存,关键是这个缓存该怎么做?
开始我的想法是不就是加个缓存,用户得分都扔进redis,然后设置一个定时写入数据库保证数据一致性和效率。
我以为我这个问题回答完了
现在在看redis官网,我突然发现如下内容:
使用有序集合你可以:
- 在大型在线游戏中创建一个排行榜,每次有新的成绩提交,使用ZADD命令加入到有序集合中。可以使用ZRANGE命令轻松获得成绩名列前茅的玩家,你也可以使用ZRANK根据一个用户名获得该用户的分数排名。把ZRANK 和 ZRANGE结合使用你可以获得与某个指定用户分数接近的其他用户。这些操作都很高效。
使用redis把排名这个问题能处理的很好了。
(后面整理整理把这个设计写的明白点,看来多看看书还是挺有收获的)