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。
当有新消息通过 PUBLISH命令 发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:
一、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 ...]
二、实例演示
三、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方法
}