Copyright: https://blog.csdn.net/xichengqc/article/details/88421299
Publishing, subscription model can be used to implement the chat function, we first have to understand what a simple demo released by subscriptions of redis
Code git Address: https://github.com/xichengxml/woodencottage/tree/master/190312-redis
- redis download and install, you can install the windows version: https://github.com/MSOpenTech/redis/releases
- Add pom file
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
- Posted by reading information from the console, real-time advertised
package com.xicheng.redis.pubsub;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.util.Scanner;
/**
* @author xichengxml
* @date 2019/3/12 13:53
*/
public class Publisher extends Thread {
private JedisPool jedisPool;
public Publisher(JedisPool jedisPool) {
this.jedisPool = jedisPool;
}
@Override
public void run() {
Scanner scanner = new Scanner(System.in);
// 从连接池中取出一个连接
Jedis jedis = jedisPool.getResource();
while (true) {
System.out.println("Pls input something(input q to quit): ");
String line = scanner.nextLine();
if ("q".equals(line)) {
break;
}
jedis.publish("mychannel", line);
}
}
}
- Subscribers, listeners subscribe, news, unsubscribe
package com.xicheng.redis.pubsub;
import redis.clients.jedis.JedisPubSub;
/**
* @author xichengxml
* @date 2019/3/12 13:59
*/
public class Subscriber extends JedisPubSub {
@Override
public void onMessage(String channel, String message) {
System.out.println("Message received, channel:" + channel + ", message:" + message);
}
@Override
public void onSubscribe(String channel, int subscribedChannels) {
System.out.println("Subscribe success, channel:" + channel + ", subscribedChannels:" + subscribedChannels);
}
@Override
public void onUnsubscribe(String channel, int subscribedChannels) {
System.out.println("unsubscribe success, channel:" + channel + ", subscribedChannels:" + subscribedChannels);
}
}
- Subscribers agent, complete subscriptions
package com.xicheng.redis.pubsub;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
/**
* @author xichengxml
* @date 2019/3/12 14:12
*/
public class SubProxy {
private static Subscriber subscriber = new Subscriber();
public static JedisPool jedisPool;
private static final String CHANNEL = "mychannel";
/**
* 初始化订阅者
*/
public static void init() {
Jedis jedis = jedisPool.getResource();
jedis.subscribe(subscriber, CHANNEL);
}
}
- Test function
package com.xicheng.redis.pubsub;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
* @author xichengxml
* @date 2019/3/12 14:16
*/
public class PubSubDemo {
public static void main(String[] args) {
// 创建连接
JedisPool jedisPool = new JedisPool(new JedisPoolConfig(), "127.0.0.1", 6379);
// 创建发布者
Publisher publisher = new Publisher(jedisPool);
publisher.start();
// 创建并初始化订阅者
SubProxy.jedisPool = jedisPool;
SubProxy.init();
}
}