用 redis 的 list 数据结构作为轻量级的消息队列,对于小系统确实是小而美,可控能力强。
当然与kafka 和 rabbitmq 相比它还有很多缺陷,在服务进行生产和消费的时候,还需要加上部分逻辑进行处理。
自己写了点 golang 代码,压力测试 redis 列表的性能。
机器配置:双核,4G
测试数据:100w
压力测试源码(github)
生产者,生产 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% 左右。
讲真,一般的小企业业务系统,真正核心的业务数据(非流水,行为记录等日志型数据),写并发能达到 1 w 的已经很厉害了,某些金融公司,几百万注册用户(活跃度不够),峰值写并发也只有几千而已。一般系统都应该是读操作多于写操作,当然具体情况应该具体分析^_^。
有疑问加站长微信联系(非本文作者)