redis Pub/Sub

409 阅读1分钟

redis用一个模块来支持消息多播Pub/Sub。必须先启动消费者,然后再执行生产者。消费者我们可以启动多个, PubSub会保证它们收到的是相同的消息序列。

publish、subscribe
> publish msg "good morning"
(integer) 1
> publish chat_room "hello~ everyone"
(integer) 1


> subscribe msg chat_room
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "msg"
3) (integer) 1

1) "subscribe"
2) "chat_room"
3) (integer) 2

1) "message"
2) "msg"
3) "good morning"

1) "message"
2) "chat_room"
3) "hello~ everyone"

psubscribe

订阅模式除了基于名称订阅,还可以订阅某个或多个主题

> publish news.1 "hello~ everyone"
(integer) 1
> publish news.2 "hello~ everyone2"
(integer) 1


> psubscribe news.* tweet.*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "news.*"
3) (integer) 1

1) "psubscribe"
2) "tweet.*"
3) (integer) 2

1) "pmessage"
2) "news.*"
3) "news.1"
4) "hello~ everyone"

1) "pmessage"
2) "news.*"
3) "news.2"
4) "hello~ everyone2"

缺点

PubSub的生产者传递过来一个消患,Redis会直接找到相应的消费者传递过去。如果一个消费者都没有,那么消息会被直接丢弃。如果开始有三个消费者,如果某个消费者突然挂掉了,生产者会继续发送消息,另外两个消费者可以持续收到消息,但是当挂掉的消费者重新连上的时候,在断连期间生产者发送的消息,对于这个消费者来说就是彻底丢失了。如果Redis停机重启,PubSub的消息是不会持久化的,毕竟Redis看机就相当于一个消费者都没有,所有的消息会被直接丢弃。

消息队列的对比:www.jianshu.com/p/f056a74d7…