使用redis集群与独立redis

Use of redis cluster vs standalone redis

我有一个问题,关于何时使用 Redis 集群与独立 Redis 比较有意义。

假设有一个实时游戏应用程序允许游戏的多个实例并希望实现 每个实例的实时排行榜。 (游戏是由用户社区创建的)。

假设我们有 100 个同时比赛 运行。

基于此处概述的用例:

https://d0.awsstatic.com/whitepapers/performance-at-scale-with-amazon-elasticache.pdf

https://redislabs.com/solutions/use-cases/leaderboards/

https://aws.amazon.com/blogs/database/building-a-real-time-gaming-leaderboard-with-amazon-elasticache-for-redis/

我们可以使用内存中的 Sorted Set 数据集来实现每个排行榜。

现在我想实现某种持久性,在每次结束时保存排行榜状态 游戏作为快照。因此,这些独立的 Sorted Set 中的每一个都保存为快照文件。

我对设计选择有疑问:

  1. redis 集群对这种情况有意义吗?还是拥有独立的 Redis 实例并为每个游戏创建一个新数据库更有意义?

据我所知,单个redis集群只有一个数据库0。(https://redis.io/topics/cluster-spec) 在那种情况下,如何才能在不同时间为每个排行榜快照数据集?

https://redis.io/topics/cluster-spec

据我所知,使用 Redis 集群仅对大型单体应用程序有意义,可能不是上述场景的最佳方法。是这样吗?

或者如果使用 AWS Elasticache for Redis 集群模式,我可以为单个数据集配置快照吗?

你是对的,集群是一种横向扩展的方式来处理非常高的请求负载和存储大量数据。

这听起来确实不像您需要为集群费心。 如果独立的 Redis 设置成为您在同时拥有数万名玩家之前的瓶颈,我会感到非常惊讶。

如果您不确定,您可以模拟一些模拟负载,看看它能处理什么。我的猜测是,在您开始达到相当高的使用率之前,您最好专注于游戏的其他复杂性。这是一个很好的问题。 :)

但是您可能想考虑拥有一个或两个副本实例,这是另一回事。

其次,不管有没有集群,为什么要使用快照(SAVEBGSAVE)来持久化你的记分牌?

如果您希望每个游戏都有单独的快照,并且每个游戏只有几个键,为什么不让您的应用程序读取并在需要时将这些键保存到传统数据库中呢?例如,您可以使用 MULTIDUMPRESTORE 来实现与快照非常相似的功能,但在您想要的特定键上。

听起来好像不需要多个数据库。

集群Redis 上的多个数据库仅在企业版中受支持,因此在ElastiCache 上不受支持。但是上面提到的方法应该可以正常工作。