ConnectionMultiplexer.GetEndPoints()中使用的是“configuredOnly”是什么?

时间:2015-09-11 15:25:37

标签: stackexchange.redis

我正在使用神奇的StackExchange.Redis库来实现ObjectCache。在ObjectCache中实现的接口方法之一是long GetCount(...),它返回数据库中的键数。看起来这可以通过StackExchange.Redis中的IServer.DatabaseSize(...)方法来满足。

我计划从ConnectionMultiplexer.GetEndPoints()获取服务器端点,为每个端点获取一个IServer,然后在每个服务器上查询我感兴趣的每个数据库的数据库大小(暂时忽略大小差异)。 / p>

现在,ConnectionMultiplexer.GetEndPoints()有一个名为“configuredOnly”的可选参数。没有提供它的结果是什么,而不是真实的,而不是假的?

ConnectionMultiplexer.GetEndPoints() implementation中,如果configuredOnly为true,我会看到它从多路复用器配置返回EndPoints,或者从名为“serverSnapshot”的数组返回EndPoints。

尽我所知,“serverSnapshot”已填充here,似乎在连接服务器时填充,或至少尝试连接。

GetEndPoints(true)是否会返回在ConnectionMultiplexer上配置的所有EndPoints? GetEndPoints()GetEndPoints(false)是否返回实际连接/有效的EndPoints? GetEndPoints方法相对于configuredOnly参数的文档是稀疏的,我后续使用返回的EndPoints需要一个行为,而不是另一个行为。

1 个答案:

答案 0 :(得分:2)

当configuredOnly设置为true时,GetEndPoints()仅返回对ConnectionMultiplexer.Connect()调用中显式指定的Redis服务器的端点。或者,当configuredOnly为false时,将为群集中的每个Redis服务器返回端点,无论它们是否在初始ConnectionMultiplexer.Connect()调用中指定。

有点苛刻,如果在ConnectionMultiplexer.Connect()调用中使用DNS名称,GetEndPoints(false)将返回DNS名称和已解析IP地址的行。例如,对于六节点Redis群集,请使用以下代码:

ConnectionMultiplexer redis = ConnectionMultiplexer("localhost:6379,localhost:6380");
foreach (var endpoint in redis.GetEndPoints(false))
{
  Console.WriteLine(endpoint.ToString());
}

将输出

$127.0.0.1:6379
Unspecified/localhost:6379
Unspecified/localhost:6380
127.0.0.1:6380
127.0.0.1:6381
127.0.0.1:6382
127.0.0.1:6383
127.0.0.1:6384

如果我致电redis.GetEndPoints(true),则只返回Unspecified/localhost:6379Unspecified/localhost:6380