Redis Sentinel C#Client

时间:2014-04-07 09:30:19

标签: c# redis redis-sentinel

我有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,那更快吗?不,完全一样。第一个非常快,然后非常慢。

我使用这个库是错误的,还是我发现了一个错误?试图抓住源并逐步完成它......

干杯......


1 个答案:

答案 0 :(得分:1)

我在这里发现了问题,这是客户的问题。在它的配置方法中,它需要大约1秒来处理一些异步对象。

相关问题