Redis的发布订阅机制
一、简介
Redis提供的发布/订阅机制中,发布者不会直接与订阅者进行直接通信,发布者会将消息发布到频道中(Channel),其它发布者可以通过订阅该频道获取消息。

二、具体操作
2.1 发布消息
命令格式:
publish channel message
我们这里通过Redis客户端发布一条消息
127.0.0.1:6379> publish test-topic aaa
(integer) 0
这里我们可以看到返回值是一个整数,这个值表示订阅test-topic这个频道的订阅者数量,如果为0表示没有订阅者订阅该频道,那么这条消息就丢失了,即便后面有其它订阅者订阅该频道。
2.2 订阅消息
命令格式:
subscribe channel [channel ...]
订阅者可以订阅一个或者多个频道,此时如果有发布者发布消息到频道,订阅者就可以收到消息。
# 订阅频道(订阅者)
127.0.0.1:6379> subscribe test-topic
# 发送消息(发布者)
127.0.0.1:6379> publish test-topic bbb
(integer) 1
# 接收消息(订阅者)
3) "bbb"
注意:一个频道可以被多个订阅者订阅,发布者发布消息到该频道时,所有订阅者都可以收到该消息。
2.3 查看活跃频道
命令格式:
pubsub channels [pattern]
活跃频道指的是有订阅者订阅的频道,[pattern]是用来匹配频道的,类似于通配符,可选。
127.0.0.1:6379> pubsub channels
1) "test-topic"
2.4 查看频道订阅数
命令格式:
pubsub numsub channel
该命令用于查看指定频道有多少订阅者。
127.0.0.1:6379> pubsub numsub test-topic
1) "test-topic"
2) (integer) 1
三、总结
Redis提供的发布/订阅机制相较于其它的专业消息队列来说(比如Kafka、RocketMQ)比较粗糙,没有实现像消息堆积和回溯等功能,消息一旦发布出去,如果没有订阅者或者订阅者下线了,那么这条消息就会永久丢失了,也就是说,Redis提供的这种发布/订阅机制仅适用于需要进行消息解耦但是对消息可靠性不敏感的场景。

浙公网安备 33010602011771号