我们现在,简单地,redis

了解更多

游戏排行榜

什么是排行榜?

排行榜的概念 - 一个记分牌,记分牌显示领先的竞争对手的排名和当前分数(或其他数据点) - 对计算机游戏世界至关重要,但排行榜现在超过比赛。他们是关于游戏化的,这是一个更广泛的实施,可以包括任何具有共同目标的人(同事,学生,销售团体,健身组,志愿者等)。

排行榜可以通过公开显示每个团队成员的当前排名来鼓励团队中的健康竞争。排行榜还提供了一种清晰的方式,可以在团队成员朝着一个目标前进时查看整个团队正在取得的成就。

游戏的排行榜

通过排行榜将任务和目标游戏化是一种很好的激励方式,它可以为员工提供与其他团队成员相比的排名反馈。如果做得好,这将导致健康的竞争,从而建立团队凝聚力。

下面是一个简单排行榜的图形示例,公司可以使用该排行榜来激励员工参与其雇主健康计划。

在这个例子中,员工可以看到排名靠前的竞争对手以及他们当前的分数。他们还可以看到比赛剩下的时间和奖励。当然,随着数据的变化(用户上传验证步长),排名也会实时变化。

排行榜分为两种类型:

绝对排行榜通过一些全球措施排列所有竞争对手。通常,这些显示组的排名成员,例如前10名。

相对排行榜根据数据的不同方面对参与者进行排序,以便根据更窄或相对的标准对成员进行分组。这可能需要复杂的计算以多种方式滑动数据。例如,一个常见的游戏场景是一个视图,显示给定竞争对手的排名以及竞争对手在其上下的排名。

当今排行榜的挑战

在我们的互联网连接的世界中,流行游戏的排行榜可以分享数十万,甚至数百万的竞争对手。这同样适用于不传统的排行榜,例如健身和健康应用和社交媒体,或客户服务,物流或欺诈减缓的内部组织任务。

用于排行榜的数据不断更新,用户希望看到以多种方式切换的数据。这使得排行榜在操作中实时分析的一个很好的例子,以及数据层处理读取,写入,排序和其他关键操作的速度的展示。

排行榜带来的技术挑战包括:

  • 大规模跨越数百万用户
  • 大量属性的数学计算(以许多方式分析数据以获得数据的不同视图)
  • 提供具有高可用性的实时排行榜访问
  • 允许用户在社交媒体上分享他们的排行榜数据
  • 允许用户在排行榜上感兴趣的属性发生变化时接收通知
  • 允许应用程序在全球范围内以完全分布式的方式更新排行榜以及在何处进行操作,同时还可以从任何位置提供排行榜状态的全局视图

实时提供此数据并保持系统可用超出了许多Web技术的范围。但是,这是一个挑战,Redis Enterprise通过建立如此使用万博体育彩的数据结构,以及Redis Enterprise提供的各种部署选项。

为什么R万博体育彩edis Enterprise会出现在排行榜上?

Redis中的排序集(ZSET)是一个内置数据结构,使排行榜简单创建和操作。

万博体育彩Redis Enterprise基于无共享、对称架构允许数据集大小线性和无缝地生长,而无需更改应用程序代码。

万博体育彩Redis Enterprise提供多种高可用性型号,并允许您以地理分发方式部署Redis,同时在需要时为用户提供本地延迟。

多个持久性选项(每次写入或每秒AOF和快照),不会影响性能确保在故障后不必重建数据库服务器。

支持非常大的数据集使用智能分层内存访问(RAM、持久内存或闪存)可确保您可以扩展数据集以满足用户的需求,而不会显著影响性能。

深度排序集

使用Redis创建一个排序集很容易ZADD命令。例如,想象将一组玩家添加到排行榜中。每个玩家都由一个用户名和玩家分数组成,分数会随着时间而不断变化

将播放器添加到Sorted Set非常简单,只需使用ZADD命令并传递集合名称、分数和播放器名称即可:

ZADD玩家200弗雷德

如果设置尚不存在,则Redis将创建它。如果确实存在,则Redis将新数据添加到现有集。排序集中的每个项目都必须是唯一的,因此如果播放器名称(成员)不存在,则将添加到集合中。但如果成员已存在,则其值将设置为提供的新值。内置的排序设置命令让您执行快速,本机排序和报告操作容易。

例如,zrange命令返回一系列成员。ZrangeByscore在一系列分数中返回一系列成员。zrank返回指定成员的排名。

Redis使得使用ZINCRBY命令增加任何玩家的分数变得很容易,传递成员名称和增加分数的数量。

此外,您可以为您的游戏/应用程序管理多个排序集。例如,全局排序集包括所有锦标赛的聚合分数,然后是每个锦标赛的多个排序集。例如,您可以使用Redis的独特功能在排序集之间进行操作遵宁斯特用于带或不带配重的联合操作。

这些简单的数据示例不显示图形类型数据,但这是Redis排序集的一部分:它是内存中的纯数据,而不是绑定到任何视图。这意味着您可以使用数据显示您喜欢的方式。

如何创建排行榜

让我们从高层快速了解一下如何在Node.js中与以前存在的web应用程序一起实现排行榜。有了节点包管理器(NPM),使用简单的命令就可以轻松地将Redis添加到web应用程序中npm安装Redis.

一旦Redis节点包安装到web应用程序项目中,您就可以通过JavaScript API访问Redis功能。(官方文件载于node_redis Github存储库可以帮助你开始。)

为了演示,让我们使用排序集创建一个简单的内存中数据库。我们将创建名为player:[uniqueId]的成员,其中uniqueId是一个整数值,当用户加入竞争时,可以通过JavaScript或Python代码轻松生成。

分数可以是您要使用的任何数字数据来对玩家进行排名(公司健康计划中的每日步骤,外星人在计算机游戏中拍摄等)。

基本的玩家数据如下所示:

排行榜玩家数据

现在看一段Node.js代码,您可以使用它来显示数据。

使用散列存储多个值

您可以创建一个可以由众多变量切换的数据集。为此,有助于将数据存储在代表每个竞争对手的结构中。Redis提供了这样的结构,称为哈希。哈希可以包含许多与一个键关联的名称值对。

您可以使用简单的数字键作为哈希中的唯一标识符,然后将该唯一密钥与排序集关联,该唯一密钥将包含分数和密钥。通过这种方式,您可以快速获取您的顶级竞争对手的分数或一系列竞争对手。然后,如果您想要更多数据,可以使用存储在排序集中的键值轻松从哈希获取它。

创建redis哈希很容易。此哈希值,名为AllPlayers,使用以下格式:

hset[unique id(用于标识哈希)][property name][property value]。。。

接下来,创建一个以player:100键命名的新Hash,并添加一个值为Fred的screenName属性。您可以将哈希键设为100,但使用[stringID:IntegerID]格式会使它更具可读性。当您添加另一个播放器时,您将创建一个新的哈希键,如播放器:101。

hset播放器:100 recknname fred

如果要检索为特定哈希存储的所有属性和值(名称-值对),只需使用以下命令:

hgetall球员:100

您可以看到此时有一个名称值对。

1)“screenname”
2) “弗雷德”

哈希是一种灵活的结构,很容易动态添加属性和值。

想象一下,您要保存玩家最后登录的日期:

球员:100 lastLoggedIn 2019-07-30

现在,当您再次调用hgetall时,您会看到:

1)“screenname”
2) “弗雷德”
3) “lastLoggedIn”
4) "2019-07-30"

只需将每个用户添加到具有其唯一ID的allPlayers哈希中,然后您就可以将这些用户与包含每个玩家分数的排序集相关联。

下面是一个快速图表,显示了如何将数据绑定在一起:

排行榜数据表

添加散列(player:NNN)后,就有了列表,可以在向排序集添加数据时使用这些player数据键来利用这些数据键。这就是你如何利用Redis内存数据库的强大功能来处理巨大的数据集(数百万玩家!),这些数据集跟踪每个玩家的排名,但速度惊人。

现在你可以很容易地实现一个解决方案,使用Node和node_redis包提取数据,这样你就可以保持web应用的排行榜新鲜。使用node_redis包API,这个工作很容易,它允许你按名称(playerRank)拉回排序集。

万博体育彩Redis Enterprise对于保持排行榜的新鲜度和用户回头查看排名至关重要。


探索更多


Baidu