我有3台redis服务器,1台主服务器和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,那更快吗?不,完全一样。第一个非常快,然后非常慢。
我使用这个库是错误的,还是我发现了一个错误?试图抓住源并逐步完成它......
干杯......
答案 0 :(得分:1)
我在这里发现了问题,这是客户的问题。在它的配置方法中,它需要大约1秒来处理一些异步对象。