如何使用Redis做异步队列

如何使用Redis做异步队列

使用List作为队列,RPUSH生产消息,LPOP消费消息

rpush testlist aaa
(integer) 1
rpush testlist bbb
(integer) 2
rpush testlist ccc
(integer) 3
lpop testlist //弹出队列
"aaa"
lpop testlist
"ccc" 
  • 缺点:没有等待队列里有值就直接消费
  • 弥补:可以通过在应用层引入Sleep机制去调用LPOP重试

BLPOP key [key …] timeout:阻塞直到队列有消息或者超时

开启两个客户端模拟消费者和生产者

session1
lpop testlist
(nil)
blpop testlist 30  //在30秒内接受到数据并返回
(1) "testlist"
(2) "aaa"
(12.09s)
session2
rpush testlist aaa
(integer) 1
  • 缺点:只能供一个消费者消费

pub/sub:主题订阅者模式

可以实现一对多的消费订阅

  • 发送者(pub)发送消息,订阅者(sub)接收消息
  • 订阅者可以订阅任意数量的频道在这里插入图片描述
session1
subscribe myTopic //来订阅myTopic
Reading messages... (press Ctrl-C to quit)
(1) "subscibe"
(2) "myTopic"
(3) (integer) 1
session2
subscribe myTopic//订阅同样的频道

Reading message... (press Ctr-C to qiit)
(1) "subscribe"
(2) "myTopic"
(3) (integer) 1
session3
subscribe anotherTopic
Reading messages... 
(press Ctrl-C to quit)
(1) "subscribe"
(2) "anotherTopic"
(3) (integer) 1

session4
publish myTopic "Hello"  //使得有两个监听了该频道的客户端自动收到信息
(integer) 2
publish myTopic "I love you" //使得有两个监听了该频道的客户端自动收到信息
(integer) 2
publish anotherTopic "hi" //那一个收到消息
(integer) 1 

pub/sub的缺点

消息的发布是无状态的,无法保证可达
可以使用kafka解决

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值