Redis阻塞/非阻塞队列

Redis队列支持阻塞与非阻塞操作,可以是先进先出,也可以是后进先出。

非阻塞队列

--shell-*RPUSH key value [value ...]
RPOP key

LPUSH key value [value ...]
LPOP key

都是后进先出操作,组合越来则是先进先出模式,都属于非阻塞队列,不管有没有找到指定键值对都会立即返回。

阻塞队列

RPUSH key value [value ...]
BRPOP key [key ...] timeout

LPUSH key value [value ...]
BLPOP key [key ...] timeout

出栈(POP)为阻塞操作,且须指定超过时间。对等待返回值的场景非常有用。

原子操作

对需要消费确认或者多次消费的场景,使用如下原子性操作:

RPOPLPUSH source destination
BRPOPLPUSH source destination timeout

消费的键值对会被放入另一个队列,以便进行确认,或提供给下个业务流程使用,RPOPLPUSH能很好的处理左手换右手的原子性操作,从一个队列中取出键值对,紧接着再放入另一个队列中。支持阻塞与非阻塞两种模式。

订阅/发布

SUBSCRIBE channel [channel ...]
PUBLISH channel message