golang 压测 redis 消息队列

用 redis  的 list 数据结构作为轻量级的消息队列,对于小系统确实是小而美,可控能力强。

当然与kafka 和 rabbitmq 相比它还有很多缺陷,在服务进行生产和消费的时候,还需要加上部分逻辑进行处理。


自己写了点 golang 代码,压力测试 redis 列表的性能。

机器配置:双核,4G

测试数据:100w

压力测试源码(github

🔥 文章来源:《压测 redis 消息队列(golang)


生产者,生产 100 w 条数据, 并发 13817 。

begin time: 2018-07-29 14:03:55.606

end    time: 2018-07-29 14:05:07.976

Produce message: 1000000

avg: 13817.860879118389

负载
代码片段

消费者,消费 100 w 条数据,并发 9433  。

begin time: 2018-07-29 14:46:11.166

end time: 2018-07-29 14:47:58.038

custom message: 1000000

avg: 9433

负载
代码片段

总结:

以上生产和消费测试都是独立测试的,生产数据和消费数据,能达到 1w 左右的并发;如果生产者和消费者同时进行工作,各自并发能力还要下降 20%左右。消费者为了保证数据被消费失败后,能保重新消费,还需要写一部分逻辑,估计性能还会下降一部分,所以单实例的Redis消息队列消费并发应该是5000 左右(根据业务多开几条队列,通过性能叠加,解决更高的并发问题?!)


以上用的是golang 第三方库 redigo做的压测,如果换成 C++ 的 hiredis 异步特性(参考我的帖子《hiredis + libev 异步测试》),生产者单进程并发轻松上 10w+,原则上消费能力也一样,但是消费为了保证数据的时序性,一般是一条条取出来入库处理,入库是同步操作,速度显然快不了多少。


更精彩内容,请关注我的博客:https://wenfh2020.com

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,403评论 19 139
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,124评论 2 89
  • 曾经有一份美好的爱情放在我的面前我没有珍惜。等到失去后才后悔莫及。如果可以再对小李说。毛欣想说。这辈子无缘再牵手。...
    毛欣与小李阅读 7,609评论 0 13
  • 1/26 我今日所做的事远比我往日的所作所为更好,更好;我今日将享受的安息远比我所知的一切更好,更好。 ——《双城...
    莫芊若阅读 4,276评论 0 0
  • 一个人的世界如一片云儿 飘来飘去也精彩 一个人的旅程似溪涧小舟 曲径拨弦宛如歌 一个人的快乐是大白天睡觉 晚上胡思...
    艺术论坛阅读 1,287评论 0 0