我有 3 个 redis 服务器,1 个主服务器和 2 个从服务器。目前只有 1 个哨兵正在运行,它正在很好地监控它们。它会在需要时促进任何实例,并且非常顺利。
我目前遇到的问题是从 C# 与它通信。从我的谷歌搜索来看,似乎只有 csredis 支持哨兵检索奴隶/主人。所以使用这样的代码......
//Create a manager, which has all the sentinels in it (this would have 3 when we go live)
RedisSentinelManager sentman = new RedisSentinelManager("localhost:26379");
//Get a slave, as these are read-only
sentman.GetSlave("mymaster", 100, 100);
//Get a master, for storing an object
sentman.GetMaster("mymaster", 100, 100);
这工作,绝对没问题,当我杀死一个实例时,各种响应会发生变化。但是,速度非常慢!
如果我创建管理器并尝试获取从站 5 次,那么每个从站请求大约需要 1 秒,这非常慢。我注意到的是,第一个请求非常非常快。请看下面的代码...
//Try and get 5 slaves
for ( int i = 0; i < 5; i ++ )
{
Stopwatch a = Stopwatch.StartNew();
var slave = sentman.GetSlave("mymaster", 50, 50);
if (slave == null)
Console.WriteLine("Failed to get slave");
Console.WriteLine("Took " + a.ElapsedMilliseconds.ToString() + "ms to get " + slave.Host + ":" + slave.Port);
}
这是输出...
Took 4ms to get localhost:6400
Took 844ms to get localhost:6400
Took 1007ms to get localhost:6400
Took 999ms to get localhost:6400
Took 994ms to get localhost:6400
奇怪的是,第一个是 4ms!然后它需要一段时间才能获得任何后续客户。所以我尝试另一个测试,为每个循环项目创建一个新的 SentinelManager,这样更快吗?不,完全一样。第一个非常快,然后非常非常慢。
我使用这个库是错误的,还是我发现了一个错误?将尝试抓住源并逐步完成它...
各位加油...