我正在使用出色的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:6379
和Unspecified/localhost:6380
。关于stackexchange.redis - 在ConnectionMultiplexer.GetEndPoints()中使用 "configuredOnly"是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32526965/