一 概述
异步是指,当前线程执行的时间比较长,在这段时间过程中,可以完成其他工作。
二 Redis实现异步队列
可以利用Redis中的List作为队列的数据结构,RPUSH生产消息,LPOP消费消息。
RPUSH key value //在列表的尾部插入数据
LPOP key //从头部取出数据
注意,LPOP命令没有任何消息返回时,说明队列中的消息已经被消费完毕,且RPUSH还没有及时生产新消息。面对此过程的时候,我们可以通过应用层引入Sleep机制去调用LPOP重试。
BLPOP key timeout //阻塞直到队列有消息或者超时,但是只能提供给一个消费着消费
pub/sub即发布订阅者模式:发送者(pub)发送消息,订阅者(sub)接收消息。Redis客户端可以订阅任意数量的频道。
SUBSCRIBE channel //创建名为channel的订阅频道
另外开启一个redis客户端,然后在同一个频道channel发送两条消息,订阅者就能接收到消息。
PUBLISH channel "Redis"
PUBLISH channel "client"
订阅者的客户端会显示如下消息:
1) "message"
2) "channel"
3) "Redis"
1) "message"
2) "channel"
3) "client"
注意:该模式无法保证消息一定传达,无法保证中途会不会消失,对于发布者来说事件是即发即失的,如果某个消费者在某个生产者发送消息的时候下线,重新上线是无法接收到消息的,遇到这种问题就要使用专门的消息队列进行如理,如kafka等。