StackExchange.ConnectionMultiplexer.Connect & StackExchange.ConnectionMultiplexer.GetServer 何时使用多个连接?

StackExchange.ConnectionMultiplexer.Connect & StackExchange.ConnectionMultiplexer.GetServer when using multiple connections?

如果您在

中有多个连接
ConnectionMultiplexer.Connect(host1, host2, etc.)

StackExchange.ConnectionMultiplexer.GetServer(...)

需要 1 个端点才能获取服务器 - 如何理解?这有什么意义?

无论您如何连接,多路复用器在幕后可能知道多个 redis 服务器实例。通常,服务器拓扑是一个对消费者没有用或不必要的实现细节——这就是为什么 GetDatabase() 下公开的 API 不需要它的原因;图书馆会担心如何将命令路由到服务器。

但是,有时消费者希望使用特定于单个服务器端点的 API;这就是 GetServer() 发挥作用的地方。例如,这可能是读取(或更改)单个服务器配置(尽管存在其他 API)。在那种情况下,您显然需要告诉库 您想要与哪个节点对话 ,这就是为什么这是 GetServer() 的必需参数。请注意,您可以使用 GetEndPoints() API 列出正在播放的端点(这 不一定与您在 Connect[Async] 中提供的端点相同 - 例如redis集群通过redis命令声明拓扑,通常是附加节点)。

如果您不确定要传递给 GetServer(...) 的端点,那么 很有可能您不应该使用 GetServer(...) - 我的意思是:您所追求的功能 可能 暴露在 GetDatabase(...) 上 - 这不需要指定端点。

或者更简单地说:

  • GetDatabase(...) 公开在 redis
  • 中构建的 logical 数据库
  • GetServer(...) 公开提供该数据库
  • 的 Redis 服务器的 底层基础设施