You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

StackExchange.Redis发布性能不佳?求确认是否为正常表现或测试问题

Redis Pub/Sub高吞吐量测试的性能解析

先复盘下你的测试场景细节:

  • 部署拓扑:发布者、订阅者、Redis服务器均在同一台PC上
  • 硬件配置:Intel(R) Core(TM) I7-4578U CPU@3.00GHz,16GB内存

你采用的同步发布代码如下:

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();

测试结果:
测试结果图

从结果看发布1万条消息耗时约6秒,这个表现确实远低于Redis Pub/Sub的常规预期,但结合你后续更新的信息——单条消息大小高达300kB,就能完全解释这个现象了:

性能偏低的核心原因

Redis Pub/Sub的性能天花板很高,在小消息(比如几十字节)场景下,单节点每秒处理几万甚至十几万条消息都很轻松,但大消息会成为绝对瓶颈:

  1. 数据传输开销爆炸:300kB的单条消息,1万条总数据量就达到了3GB,哪怕是本地回环网络,也需要大量的内存拷贝和带宽占用,直接把CPU或IO资源拉满,拖慢整体处理速度。
  2. 同步调用放大延迟:你使用的是同步Publish方法,每次调用都要等待Redis的确认响应,大消息的序列化、传输、确认过程比小消息慢得多,进一步加剧了性能损耗。

验证Redis真实性能的建议

如果想测试Redis Pub/Sub的真实吞吐量,可以做以下调整:

  • 改用小消息测试:比如用几十字节的随机字符串作为消息体,这时候你会发现吞吐量会有数量级的提升。
  • 切换异步调用:把同步Publish换成PublishAsync,并配合异步批量处理优化,减少线程阻塞带来的开销。
  • 检查Redis配置:确保Redis的内存、IO相关配置(比如tcp-keepalive、maxmemory-policy)处于最优状态,不过本地部署的默认配置一般足够支撑小消息测试。

总的来说,你这次测试的性能表现是大消息场景下的正常结果,并不是Redis或StackExchange.Redis本身的性能上限。

内容的提问来源于stack exchange,提问作者ricky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:36:59