Redis实现消息队列有3中方式
- 利用Redis的LIST数据结构的有序特性
- Pub/Sub 发布订阅模式
- Stream
LIST消息队列
List数据类型的入口、出口不一致。可以保证有序性
常用命令
- LPUSH与RPOP 或 RPUSH与LPOP是非阻塞式队列
- LPUSH与BRPOP 或 RPUSH与BLPOP是阻塞式队列
缺点:无法避免消息丢失(拿到消息后,消息就在队列删除了,如果宕机,消息相当于没了)、只支持1个消费者(不像广播模式,多个消费者支持消费)
Pub/Sub模式
Redis2.0引入的功能,一个发布,全体订阅得到通知
常用命令
- SUBSCRIBE channel:订阅一个或多个频道
- PUBLISH channel msg:向一个频道发送消息
- PSUBSCRIBE pattern:订阅通配符的频道
缺点:无法持久化、无法避免消息丢失、(消费者自己来不及处理所有就会堆积)消息堆积有上限
Stream 新的数据类型
Stream是Redis5.0引入的。如果对业务有超高精确性,还是考虑专业的MQ吧。Stream只有消费确认机制,没有生产者确认机制。一旦生产者发送消息,但是没确认,业务相当于就有问题了!
XGROUP
XADD
自己参考吧:https://www.bilibili.com/video/BV1cr4y1671t?p=77&share_source=copy_web&vd_source=164fe0eebbe1de2dc8ea1db9b173c783
本身Redis就不适合做消息队列,放弃了!命令极其复杂!
特殊说明: 以上文章,均是我实际操作,写出来的笔记资料,不会盗用别人文章!烦请各位,请勿直接盗用!转载记得标注来源!