欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Redis学习笔记十(发布订阅)

程序员文章站 2022-04-27 23:26:22
...

版权声明:本文为 小异常 原创文章,非商用*转载-保持署名-注明出处,谢谢!
本文网址:https://blog.csdn.net/sun8112133/article/details/102834428







Redis发布订阅(pub/sub) 是一种消息通信模式:发送者(pub) 发送消息,订阅者(sub) 接收消息。Redis客户端 可以订阅任意数量的频道。下图是频道 channel1,以及订阅这个频道的三个客户端 ———— client2、client5 和 client1。

Redis学习笔记十(发布订阅)

当有新消息通过 PUBLISH命令 发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:

Redis学习笔记十(发布订阅)


一、Redis发布订阅常用命令

1、订阅命令

1)PSUBSCRIBE

订阅一个或多个符合给定模式的频道,*是通配符。

a. 命令格式

PSUBSCRIBE 频道模式1 [频道模式N ...]

b. 示例

订阅所有以 it 开头的频道(如:订阅 it.news 、 it.blog 、 it.tweets 频道等等)。

redis 127.0.0.1:6379> psubscribe it*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "it*"
3) (integer) 1

2)SUBSCRIBE

用于订阅给定的一个或多个频道的信息。

a. 命令格式

SUBSCRIBE 频道1 [频道N ...]

b. 示例

订阅新闻和游戏频道。

redis 127.0.0.1:6379> subscribe news games
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "news"
3) (integer) 1
1) "subscribe"
2) "games"
3) (integer) 2

2、发送信息命令

1)PUBLISH

用于将信息发送到指定的频道。

a. 命令格式

PUBLISH 频道 消息

b. 示例

新闻频道发送消息 “hello”。

redis 127.0.0.1:6379> publish news "hello"
(integer) 2    # 已发送给两个客户端了
    客户端收到:
    1) "message"
    2) "news"
    3) "hello"

3、退订命令

退订命令在命令提示框中无法演示,大家简单了解即可。

1)PUNSUBSCRIBE

用于退订所有给定模式的频道。这个命令在不同的客户端中有不同的表现。

a. 命令格式

PUNSUBSCRIBE [频道模式1 [频道模式N ...]]

2)UNSUBSCRIBE

用于退订给定的一个或多个频道的信息。这个命令在不同的客户端中有不同的表现。

a. 命令格式

UNSUBSCRIBE 频道1 [频道N ...]


二、实例演示

Redis学习笔记十(发布订阅)



三、Jedis演示

public class Demo extends JedisPubSub {
    // 接受消息(先开启,进入阻塞状态)
    @Test
    public void test1() {
        // 连接本地Redis服务
        Jedis jedis = new Jedis("localhost");
        System.out.println("连接成功");
        jedis.subscribe(new Demo(), "news");     // 订阅news频道,完全匹配,进入阻塞状态
        // jedis.psubscribe(new Demo(), "news");     // 订阅news开头的频道,模糊匹配,进入阻塞状态
    }

    // 发送消息(后开启)
    @Test
    public void test2() {
        // 连接本地Redis服务
        Jedis jedis = new Jedis("localhost");
        System.out.println("连接成功");
        System.out.println("开始发送消息~~~");
        jedis.publish("news", "hello");     // news频道发送消息
    }

    @Override
    public void onMessage(String channel, String message) {
        System.out.println("我是onMessage()方法[完全匹配方法],已接受到以下发来的消息");
        System.out.println("频道:" + channel);
        System.out.println("消息:" + message);
    }

    @Override
    public void onPMessage(String pattern, String channel, String message) {
        System.out.println("我是onPMessage()方法[模糊匹配方法],已接受到以下发来的消息");
        System.out.println("匹配频道:" + pattern); 
        System.out.println("频道:" + channel);
        System.out.println("消息:" + message);
    }

	// 重写onPSubscribe、onPUnsubscribe、onSubscribe、onUnsubscribe方法
}

Redis学习笔记十(发布订阅)


博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!