两周前,Redis 团队参加了 2014 年游戏开发者大会。正如其名,大会云集了众多游戏开发者,我与他们就 Redis 在构建可扩展游戏中的应用进行了深入的讨论。以下是 Redis 在多人游戏行业中的最佳使用案例。
如果说 Redis 有一项功能绝对是游戏开发者的心头好,那一定是其有序集合。几乎所有在线多人游戏都至少有一个玩家排名列表,而且大多数游戏会同时管理多个排行榜。例如,在线 FPS 游戏可以按玩家击杀数量进行排名,并维护全局排行榜以及地区排行榜和比赛排行榜。这类列表不断更新,并频繁分页显示其内容。
Redis 几乎天生就适合此任务 - 要更新排行榜,只需执行 ZADD 命令添加玩家标识即可。要获取玩家排名,只需执行 ZRANK 命令即可!而要获取前 n 名玩家或对排行榜进行分页,只需使用 ZRANGE 命令即可。
会话管理是任何在线应用程序的关键,游戏也不例外。实际上,实时游戏的会话管理要求比一般的购物或社交网站更加严格。虽然购物车和社交流更新可能需要几秒钟才能完成,但游戏的成功往往取决于其响应速度和玩家当前统计数据(例如生命值、增益等)的准确性。
在 Redis 中管理会话是一种非常流行的做法,高效的哈希数据结构使其管理(例如使用 HINCRBY 命令)玩家计数变得非常容易。
玩家资料是另一个经常被访问的信息。根据游戏的不同,资料包含玩家相关的各种信息。虽然资料更新频率较低(至少与玩家排名和会话数据相比),但它仍然经常被玩家本人及其朋友/对手访问。同样,Redis 哈希使此操作变得轻而易举。
我非常喜欢多语言持久化,而且我在这次活动中确实过足了瘾。许多我交谈过的游戏开发者表示,他们使用 Redis 来增强其他数据存储(例如 MySQL、Cassandra 和 MongoDB)的功能。以下引述来自一位开发者,让我印象深刻:“所有数值信息都存储在 Redis 中,其他信息存储在 Cassandra 中”。