redis消息队列的使用

很久之前就是知道redis可以作为消息队列使用,但是一直没有实际使用过,今天实际使用了一下,发现还是有一些内容需要注意的。

redis有5个常用数据结构,分别是string,list,set,hash,sorted set, 其中list就是用来作为消息队列的。

消息队列首先它是一个队列,因此底层一定是一个队列,而list通过lpush和rpop就可以实现队列功能,但是仅仅是队列还远远不能构成为一个消息队列,因为作为消息队列,它最重要的就是需要有监听功能,也就是我们需要能够在队列中有消息的时候能够及时处理。

那么rpop显然是不合适的,因为它会一直查询队列状态,消耗资源,这个时候我们应该使用brpop,这个命令会移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。因为有了阻塞,可以避免资源的浪费。

那么既然redis可以实现消息队列,为什么几乎没有人使用呢,因为作为消息队列,还有几个点是我们非常注重的。

  • 消息的可靠性
  • 消息的重复消费

redis的list消费消息只能消费一次,不能重复消费,这在某些情况显然是不合适的。另外它没有可靠的确认机制,我们需要自己去实现,很复杂,而且可能考虑的不是很周全,因此,让专业的人做专业的事,是我们最应该做的。