消息队列 redis vs nsq

  为了解决高并发而形成阻塞的问题,通常是通过消息队列来解决问题。

  最近研究了下golang消息队列的nsq框架(http://nsq.io),也动手实现了这么个功能:通过nsq的生产者大量生产消息向nsq推送而形成消息队列,然后通过nsq的消费者从消息队列里接收消息,再利用websocket将接收到的消息给所有web客户端进行消息推送。这样所有客户端就都能接收服务器广播的消息。

  redis是NoSQL数据库,redis它的设计是用来做缓存的,但是由于它自身的某种特性使得他可以用来做消息队列,所以就比较了一下redis和nsq处理消息队列的吞吐量和执行效率。

  消息队列执行效率和吞吐量测试方法:
  redis:
    生产者:LPUSH key value     // 往名为key的链表的表头插入数据value
    消费者:BRPOP key 0          // 阻塞式从名为key的链表的表尾弹出一个元素
  nsqd:
    生产者:Publish(topic, msg) // 往nsqd消息队列里推送主题为topic内容为msg的消息
    消费者:AddHandler(handle) // 注册handle,在handle里接收消息队列的消息

 

测试1(内网+发送小数据消息):

 测试2(内网+发送大数据消息):

 

   条件有限,没有测试当redis和nsq服务器都处于外网的情况。其实这个很有必要,因为redis部署在外网时听说速度会慢很多。

 

posted @ 2015-08-01 10:05  hezhixiong  阅读(2273)  评论(1编辑  收藏  举报