Redis Sentinel C#客户端

3
我有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,速度会更快吗?不,完全相同。第一个请求非常快,然后变得非常慢。

我是不是在错误地使用这个库,或者我发现了一个bug?我将尝试获取源代码并逐步解决问题...

感谢大家...


1个回答

1

我发现问题出在这里,这是客户端的一个问题。在它的“dispose”方法中,它需要大约1秒钟来处理一些异步对象的处理。


你打算提交一个拉取请求来应用你的更改吗? - Neil
我提交了一个问题,但我的更改是完全剥离库中的所有异步代码,所以并不完全是修复。 - Dean Thomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接