用Redis实现异步队列:
用list作为队列
RPUSH作为生产者生产消息,LPOP 作为消费者消费消息
缺点:没有等待队列里有值就直接消费
弥补:可以通过在应用层引入sleep机制去调用LPOP重试;
如果不用sleep机制,可以使用BLPOP key[key..] timeout 阻塞直到队列有消息或者超时
缺点:一个生产者对应一个消费者
如何做到生产一次,能让多个消费者消费?
pub/sub:主题订阅模式
发送者(pub)发送消息,订阅者(sub)接受消息
订阅者可以订阅任意数量的频道
缺点:消息无状态,无法保证可达