Redis实现消息队列

1. Redis实现消息队列有两种方式

Redis能做消息队列得益于他list对象blpop/brpop接口以及Pub/Sub(发布/订阅)的某些接口。他们都是阻塞版的,所以Redis实现消息队列有两种方式:

  • 通过数据结构list来实现
  • 通过pub/sub来实现

另外redis存放的数据都只能是string类型,所以在任务传递的时候只能是传递字符串。我们可以将消息在发布者序列化成json格式的字符串,然后消费者那边再转换一下即可。

2. 通过数据结构list来实现

2.1 实现机制

消息接收:
redis> brpop tasklist 0
“im task 01”
这个例子使用blpop命令会阻塞方式地从tasklist列表中取头一个数据,最后一个参数就是等待超时的时间。如果设置为0则表示无限等待。

消息发送:
redis> lpush tasklist ‘im task 01’
redis> lpush tasklist ‘im task 02’

2.2 优点

  • 能够实现持久化
    采用 Master-Slave 数据复制模式。队列操作都是写操作,Master任务繁重,能让Slave分担的持久化工作,就不要Master做。RDB和AOF两种方法都用上,多重保险。
  • 支持集群
  • 接口使用简单

2.3 不足

  • Redis上消息只会被一个消费者消费,不会有多个订阅者消费同一个消息,简单一对一
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值