开发者学堂课程【Redis 入门实战演练: redis 实现消息队列及常用命令(二)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/653/detail/10838
redis 实现消息队列及常用命令(二)
六、查看队列所有消息
开一个 redis - c
127.0.0.1:6379> LRANGE(加队列名称) channel 1 0 -1(从开始到结尾)
1) "msg5"
2) "msg4"
3) "msg3"
4)"msg2"
5) "msg1
七、生产者消费者的消息
后期在程序里面通过 RPOP 来弹,但是一定要注意顺序,先进先出。当然我们的数据是最简单的数据。
127.0.0.1:6379> RPoP channel 1
#从管道的右侧消费
"msg1"
127.0.0.1:6379> POP channel 1
"msg2"
127.0.0.1:6379> POP channel 1
"msg3"
127.0.0.1:6379> POP channel 1
"msg4"
127.0.0.1:6379> POP channel 1
"msg5"
127.0.0.1:6379 > POP channel 1
(nil)
(大家不用关心其他的消息队列软件是怎么用的,我们之后会讲到。)
八、支持发布者和订阅者模式
这个模式比较特殊,为什么比较特殊?因为之前的消息在生产者、消费者、订阅者模式下。这个消息只能被消耗一次。但是订阅模式不一样。生产者和消费者模式是一对一的,由生产者生产一个东西这个消息只能被一个消费者利用。在有多个生产者和消费者的情况下不需要一一绑定。
订阅者模式,一对多,一个消息可以被多个消费者消费,而且可以同时被消费。
在发布者订阅模式下,发布者将消息发布到指定的 channel 里面,凡是监听该Channel 的消费者都会受到同样的一份消息,这种模式类似于是收音机的广播模式,即凡是收听到某个频道的观众都会受到主持人发布的相同的消息内容。
订阅者在相同的群或者相同的频道内。
此模式常用语群聊天、群通知、群公告等场景。
(这个消息可以让当前在群里的人都可以看到,而不是只能让一个人看到。)
Subscriber:订阅者
Publisher:发布者
Channel:频道(会有好多频道,当然在公司里会给频道定义名称)
九、阅读者监听频道
在里面监听一个队列。这个频道名称没有也可以。
比如说监听一个 linux39
127.0.0.1:6379【2】>SUBSCRIBE linux39
1)“subscribe”
2)“linux39”
3)(integer) 1
这个频道需要找一个终端来模拟
这是一个发布者。
十、发布者发布消息
127.0.0.1:6379>PUBLISH channel 1 test
#发布者发布消息
(integer) 2
127.0.0.1:6379> PUBLISH channel 1 test 2
(integer) 2
这个消息就可以看到。
只要发布之后过去之后,就看不到这个消息了。只能看见从当前开始往后的。
频道名称可以任意改变。
十一、可以订阅多个频道
订阅指定的多个频道
>SUBSCRIBE channel 1 channel 2
(在SUBSCRIBE这条指令后面可以跟多个频道名称,订购多个频道是根据公司的业务和能力来确定的 )
订阅者是负责接受上一级的请求在数据库中写账号和密码。
如果公司中有两套不同的业务,两个业务后台的数据不一样,但是都会经过订阅者到数据库这一步骤。
下图:无论是新产品还是二手交易都要做登录,这是需要将登陆消息发布到 MQ中,之后再由订阅者服务到数据库中做认证。之后订阅者就会对 MQ 做监控。这是订阅者就会监控多个序列里面的数据,分别是:新产品,二手交易。
127.0.0.1:6379> SUBSCRIBE Linux39 magedu
Reading messages... (press Ctrl-C to quit)
1)"subscribe
“
2)"linux39"
3) (integer)1
1)"subscribe"
2)"magedu"
3). (integer) 2
1)"message'
2)"magedu
3)"msg2"
十二、订阅所有频道
127.0.0.1:6379> PSUBSCRIBE*
在当前的 rides 内可以订阅所有频道。
127.0.0.1:637921> SUBSCRIBE
Reading messages. (press Ctrl-C to quit)
1)"subscribe"
2)...
3)(integer) 1
这种模式用的不多,在当前 DB 中,所有频道都能订阅到。