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

mac2024-04-03  58

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

文章目录

一、Redis发布订阅常用命令1、订阅命令1)PSUBSCRIBEa. 命令格式b. 示例 2)SUBSCRIBEa. 命令格式b. 示例 2、发送信息命令1)PUBLISHa. 命令格式b. 示例 3、退订命令1)PUNSUBSCRIBEa. 命令格式 2)UNSUBSCRIBEa. 命令格式 二、实例演示三、Jedis演示

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方法 }

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