Redis教程 - Pub/Sub(发布/订阅)

Redis提供了 基于 “发布/订阅”模式的消息机制,此种模式下,消息发布者和订阅者不进行直接通信,发布者客户端向指定的频道(Channel)发布消息,该频道的每个客户端都可以收到该消息,如图3-16所示。Redis提供了若干命令支持该功能,在实际应用开发时,能够为此类问题提供实现方法。

Redis教程 - Pub/Sub(发布/订阅)_第1张图片
pub-sub.png

命令

Redis主要提供了 发布消息、订阅频道、取消订阅以及 按照模式订阅和取消订阅等命令。

1.发布消息

命令格式如下:

publish channel message

例如,向channel:sports 频道发布一条消息"Tom won the champion",返回的结果为订阅者个数。

publish channel:sports "Tom won the champion"

2.订阅消息

命令格式如下:

subscribe channel [channel ...]

订阅者可以订阅一个或多个频道,下面操作为当前客户端订阅了 channel:sports 频道:

subscribe channel:sports

注意:新开启的订阅客户端,无法收到该频道之前的消息,因为Redis不会对发布的消息进行持久化。

和许多专业的消息队列相比(例如Kafka、RocketMQ)相比,Redis的发布-订阅略显粗糙,例如无法实现消息堆积和回溯。

3.取消订阅

命令格式如下:

unsubscribe channel [channel ...]

客户端可以通过unsubscribe 命令取消对指定频道的订阅,取消成功后不会再收到该频道的发布消息:

unsubscribe  channel:sports

4.按照模式订阅和取消订阅

命令格式:

psubscribe  pattern 
punsubscribe  pattern 

除了subscribe和unsubscribe 命令,Redis还支持glob风格的订阅命令psubscribe 和取消订阅命令punsubscribe ,例如下面操作订阅 以 it开头的所有频道:

psubscribe  it*

5.查询订阅

1、查看活跃的频道

pubsub channels [pattern ]

所谓活跃的频道是指当前频道至少有一个订阅者,如下:

pubsub channels

指定pattern :

pubsub channels channel:*r*

2、查看订阅频道数

pubsub numsub [channel ...]

3、查看订阅模式

pubsub numpat

Jedis Publish/Subscribe

添加maven依赖:


    redis.clients
    jedis
    2.9.0

Jedis订阅 channel:sports频道,代码如下:

class MyListener extends JedisPubSub {
        public void onMessage(String channel, String message) {
        }

        public void onSubscribe(String channel, int subscribedChannels) {
        }

        public void onUnsubscribe(String channel, int subscribedChannels) {
        }

        public void onPSubscribe(String pattern, int subscribedChannels) {
        }

        public void onPUnsubscribe(String pattern, int subscribedChannels) {
        }

        public void onPMessage(String pattern, String channel,
            String message) {
        }
}

MyListener l = new MyListener();

jedis.subscribe(l, "channel:sports");

参考资料

https://github.com/xetorthio/jedis/wiki/AdvancedUsage

你可能感兴趣的:(Redis教程 - Pub/Sub(发布/订阅))