我正在尝试使用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();
如结果所示,发布10k消息大约需要6秒钟。
我想确认是redis(或StackExchange.Redis)的实际性能吗?或者我的测试有问题?
更新
根据接受的答案,我发现原因是我的邮件大小太大(300kB)。
答案 0 :(得分:1)
要检查的事项:
我手边有一个基准,我曾经回答过另一个问题。在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