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



如果在

中有多个连接
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
  • 中构建的逻辑数据库
  • GetServer(...)暴露了提供该数据库的redis服务器的底层基础设施

最新更新