Redis实现异步队列的三种方式及优缺点

如何使用Redis做异步队列?
1.使用List作为队列,RPUSH生产消息,LPOP消费消息
缺点:在生产者/消费者模式里,当LPOP没有消息的时候即证明消息暂时被消费完毕,并且生产者还没有来得及生成数据,LPOP没有等待队列里有值就直接消费。
弥补:可以通过在应用层引入Sleep机制去调用LPOP重试,进而实现简单的异步队列。

2.BLPOP在没有消息的时候阻塞直到消息到来或者超时
测试流程:我们在一个消费者客户端中输入blpop testlist 30,意思是在30秒内会一直等待testlist的消息,如果超过30秒没有数据则返回nil。 同时在另一个客户端即生产者执行rpush testlist aaa去放入数据,回车执行后会发现,原来的消费者客户端中blpop指令就能获取并返回testlist aaa数据,也就证明了BLPOP能替代队列做更精准的阻塞控制。
缺点:只能供一个消费者消费

3.pub/sub主题订阅者模式
发送者pub发送消息,订阅者sub接收消息,订阅者可以订阅任意数量的频道(Topic即消费者订阅的主题)。
缺点:消息的发布是无状态的,无法保证可到达
测试流程:
当有新的消息通过publisher频道topic时,这个消息会被发送给订阅它的三个客户端。
两个客户端订阅myTopic频道:subscribe myTopic
一个客户端订阅anotherTopic:subscribe anotherTopic
用于发送消息客户端发送消息:publish myTopic “Hello”
两个订阅myTopic的客户端接收到了"Hello"
用于发送消息客户端发送消息:publish anotherTopic “Hi”
一个订阅anotherTopic的客户端接收到了"Hi"

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值