redis(StackExchange.Redis)发布性能差?

时间:2018-05-14 10:07:40

标签: performance redis stackexchange.redis

我正在尝试使用redis pub / sub在高速应用程序之间传输数据(每秒25000条消息)。

我测试过如下:

拓扑

1个发布者,1个订阅者和redis服务器。所有这些都托管在同一台电脑上。

pc硬件

CPU:Intel(R)Core(TM)I7-4578U CPU@3.00GHz 内存:16.0GB

Stopwatch sw = new Stopwatch();
sw.Start();
while (_started)
{
    //db.PublishAsync(RawMessagesCapturedMsg.TopicGroupName, redisValue);
    db.Publish(RawMessagesCapturedMsg.TopicGroupName, redisValue);
    totalRedisMsg++;
    if (totalRedisMsg % 10000 == 0)
    {
        Console.WriteLine("totalRedisMsg: {0} @ {1}, time used(ms): {2}",
            totalRedisMsg, DateTime.Now, sw.ElapsedMilliseconds);
    }
}
sw.Stop();

结果: enter image description here

如结果所示,发布10k消息大约需要6秒钟。

我想确认是redis(或StackExchange.Redis)的实际性能吗?或者我的测试有问题?

更新

根据接受的答案,我发现原因是我的邮件大小太大(300kB)。

1 个答案:

答案 0 :(得分:1)

要检查的事项:

  1. 什么是CPU负载?它满了吗?如果没有,你可能会遇到带宽或延迟。
  2. 邮件的大小是多少?通过转移乘以它 您看到的速率,它是否与您(预期)的带宽相当 有?
  3. Redis实例的ping是什么?也许往返旅行需要很长时间。在这种情况下,您可以使用许多具有多个连接的线程来提高吞吐量。
  4. 我手边有一个基准,我曾经回答过另一个问题。在Java(生菜客户端库)中,我有1个线程的结果,本地cpu i5-6400,远程cpu E5-2603 v4,0.180ms ping到远程并且消息是“hello”。

    Benchmark              (address)   Mode  Cnt      Score      Error  Units
    LettuceThreads.pooled     socket  thrpt    5  35699.267 ±  706.946  ops/s
    LettuceThreads.pooled  localhost  thrpt    5  28130.801 ± 9476.584  ops/s
    LettuceThreads.pooled     remote  thrpt    5   3080.115 ±  422.390  ops/s
    LettuceThreads.shared     socket  thrpt    5  41717.332 ± 3559.226  ops/s
    LettuceThreads.shared  localhost  thrpt    5  31092.925 ± 9894.748  ops/s
    LettuceThreads.shared     remote  thrpt    5   3920.260 ±  178.637  ops/s
    

    将它与您拥有的硬件进行比较,它可能会帮助您评估库的性能。注意,即使知道CPU速度慢了2倍,性能也会下降10倍,远远不够。

    以下是16个主题。因此,如您所见,尽管存在延迟,但更多的线程可能有助于至少获得吞吐量。

    Benchmark              (address)   Mode  Cnt       Score       Error  Units
    LettuceThreads.pooled     socket  thrpt    5  123846.426 ±  2926.807  ops/s
    LettuceThreads.pooled  localhost  thrpt    5   83997.678 ± 31410.595  ops/s
    LettuceThreads.pooled     remote  thrpt    5   31045.111 ±  2198.065  ops/s
    LettuceThreads.shared     socket  thrpt    5  218331.662 ± 17459.352  ops/s
    LettuceThreads.shared  localhost  thrpt    5  182296.689 ± 52163.154  ops/s
    LettuceThreads.shared     remote  thrpt    5   30803.575 ±  2128.306  ops/s