版权声明: https://blog.csdn.net/Master_chaoAndQi/article/details/82934341
SUBSCRIBE channel [channel ...] 订阅一个或多个频道
PUBLISH channel message 将信息发送至指定频道
PSUBSCRIBE pattern [pattern ...] 订阅一个或多个符合模式的频道
PUBSUB subcommand [argument [argument ...]] 查看订阅与发布系统状态
PUNSUBSCRIBE [pattern [pattern ...]] 退订所有给定模式的频道
UNSUBSCRIBE [channel [channel ...]] 退订一个或多个频道
一 命令行
1 开启两个redis客户端
在客户端1订阅cctv频道
127.0.0.1:6379> SUBSCRIBE cctv
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "cctv"
3) (integer) 1
在客户端2发送一条消息
127.0.0.1:6379> PUBLISH cctv nihao
查看客户端1
127.0.0.1:6379> SUBSCRIBE cctv
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "cctv"
3) (integer) 1
1) "message"
2) "cctv"
3) "nihao"
2 退订
127.0.0.1:6379> UNSUBSCRIBE cctv
1) "unsubscribe"
2) "cctv"
3) (integer) 0
3 查看活跃中的订阅频道
127.0.0.1:6379> PUBSUB CHANNELS
1) "cctv"
127.0.0.1:6379>
4 退订全部
127.0.0.1:6379> PUNSUBSCRIBE *
1) "punsubscribe"
2) "*"
3) (integer) 0
127.0.0.1:6379>
5 订阅多个
127.0.0.1:6379> PSUBSCRIBE *
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "*"
3) (integer) 1
二 java 方式模拟
扫描二维码关注公众号,回复:
3469239 查看本文章
1 模拟订阅客户端继承JedisPubSub抽象类 实现其中的消息接收 订阅 取消订阅触发事件的方法
package redisUtils;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;
public class RedisSubTest1 extends JedisPubSub{
public RedisSubTest1(){};
@Override
public void onMessage(String channel, String message) {//订阅消息发送过来的时候触发
System.out.println(channel +"发来消息: "+message);
}
@Override
public void onSubscribe(String channel, int subscribedChannels) { //订阅的时候触发
System.out.println("我订阅了"+channel);
}
@Override
public void onUnsubscribe(String channel, int subscribedChannels) { // 取消订阅的时候触发
System.out.println("我取消订阅了");
}
public static void main(String[] args) {
Jedis jedis = RedisUtils.getJedis();
RedisSubTest1 client = new RedisSubTest1();
jedis.subscribe(client, "cctv");
}
}
2 模拟发布客户端 延时发送消息
package redisUtils;
import java.util.List;
import redis.clients.jedis.Jedis;
public class RedisPushClient {
public static void main(String[] args) {
Jedis jedis = RedisUtils.getJedis();
for (int i = 0; i < 5; i++) {
jedis.publish("cctv", "学习redis?" + System.currentTimeMillis());
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
List<String> pubsubChannels = jedis.pubsubChannels("*");
System.out.println(pubsubChannels);
}
}
完成简单的发布订阅模拟