Redis阻塞/非阻塞队列

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

非阻塞队列

RPUSH key value [value ...]
RPOP key

LPUSH key value [value ...]
LPOP key

R/LPUSH都是后进先出操作,组合起来则是先进先出,属于非阻塞操作,即:不管有无找到指定键值都立即返回。

阻塞队列

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

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

出栈(POP)为阻塞操作,且须指定超时时间。

适用于等待返回值的场景。

原子操作

适用消费确认或多次消费的场景,使用如下原子操作:

RPOPLPUSH source destination
BRPOPLPUSH source destination timeout

被消费的键值会被放入另一个队列,可用于确认。

RPOP LPUSH能处理左手换右手的原子性操作,从一个队列中取出键值,再放入另一个队列。

支持阻塞/非阻塞模式。

订阅/发布

SUBSCRIBE channel [channel ...]
PUBLISH channel message