有一个集中的 [redis] 缓存实例还是每个实例都拥有更好?

有一个集中的 [redis] 缓存实例还是每个实例都拥有更好?

我在 AWS 中有一个包含公有子网和私有子网的 VPC。在私有子网中,我有两个负载平衡的 EC2 应用服务器和一个 EC2 数据库/缓存服务器。

两个应用服务器连接到数据库/缓存服务器以进行数据库查询,但数据库服务器上还运行着一个 Redis 实例。两个应用服务器都配置为连接到此 Redis 实例。

我的问题是 - 这样做性能好吗?在每个应用服务器节点上安装一个 Redis 实例会更好吗?

或者我们最好将 redis 留在数据库/缓存服务器上?

答案1

这取决于您的使用情况,但缺乏其他信息,我认为最好使用集中式缓存。

添加条目和缓存命中

如果您有一个集中式缓存,那么添加到缓存中会使所有 EC2 实例受益。

但是如果您有单独的缓存,那么添加到缓存只会对该 EC2 实例有益。

示例:假设从 EC2 实例 1 执行数据库查询,然后 EC2 实例 2 执行相同的查询。

使用集中式缓存时,查询 2 将命中缓存,而使用独立缓存时,两次查询都将命中缓存。添加更多 EC2 实例将加剧缓存命中。

缓存失效

使用单独的缓存时,您无法使缓存中的条目无效,因为这只会影响本地缓存。其他缓存仍将包含陈旧/无效的数据。

结论

使用集中式缓存。

答案2

尽管本地缓存可以提高性能,但它并不是最佳的架构选择,也不是扩展应用程序的正确方法。

正如@Matt Houser 所解释的那样,集中式缓存是正确的选择,因为它可以更好地支持应用程序的增长。

相关内容