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

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

现在,ConnectionMultiplexer.GetEndPoints()具有一个称为“configuredOnly”的可选参数。不提供它,正确与错误的结果是什么?

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

据我所知,“serverSnapshot”填充为here,它似乎在服务器连接或至少尝试连接时填充。
GetEndPoints(true)是否返回在ConnectionMultiplexer上配置的所有端点? GetEndPoints()GetEndPoints(false)是否返回实际上已连接/有效的端点?与configureOnly参数有关的GetEndPoints方法的文档很稀疏,而我对返回的EndPoints的后续使用需要一种行为,而无需另一种行为。

最佳答案

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

有点奇怪,如果在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

关于stackexchange.redis - 在ConnectionMultiplexer.GetEndPoints()中使用 "configuredOnly"是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32526965/

10-09 01:45