一般来说消息队列有两种场景,一种是发布者订阅者模式,而另一种是生产者消费者模式。这两种场景的消息队列Redis都能够实现。
该模式是利用了List能够实现队列(先进先出)和栈(先进后出)的特点。Redis List的主要操作为lpush/lpop/rpush/rpop四种,分别代表从头部和尾部的push/pop,除此之外List还提供了两种pop操作的阻塞版本blpop/brpop,用于阻塞获取一个对象。
生产者将消息数据添加到List结构中,消费者通过rpop或者brpop消费消息,brpop是阻塞的方式,可以设置等待时长。如果有多个消费者同时监听该列表,只有一个能取到消息。因此这种模式的应用场景主要适用于对于每个消息只能被最多一个消费者所消费的场景。
视频讲解如下:
下面的通过具体的步骤来演示如何使用Redis消息机制的生产者消费者模式。
127.0.0.1:6379> lpush myqueue a1 (integer) 1 127.0.0.1:6379> lpush myqueue a2 (integer) 2 127.0.0.1:6379> lpush myqueue a3 (integer) 3 127.0.0.1:6379> lpush myqueue a4 (integer) 4 127.0.0.1:6379> lpop myqueue "a4" 127.0.0.1:6379> lpop myqueue "a3" 127.0.0.1:6379> lpop myqueue "a2" 127.0.0.1:6379> lpop myqueue "a1"