Redis实现异步队列

一 概述

异步是指,当前线程执行的时间比较长,在这段时间过程中,可以完成其他工作。

二 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等。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值