Heim >Datenbank >Redis >Was nützt Redis Publish and Subscribe?

Was nützt Redis Publish and Subscribe?

(*-*)浩
(*-*)浩Original
2019-11-22 10:50:102621Durchsuche

Was nützt Redis Publish and Subscribe?

Redis Publish and Subscribe (Pub/Sub) ist ein Nachrichtenkommunikationsmodell: Der Absender (Pub) sendet Nachrichten und die Abonnenten (Sub) empfangen Nachrichten.

Redis-Kunden können eine beliebige Anzahl von Kanälen abonnieren. (Empfohlenes Lernen: Redis-Video-Tutorial)

Redis bietet eine Veröffentlichungs- und Abonnementfunktion, die für die Nachrichtenübertragung verwendet werden kann. Der Veröffentlichungs- und Abonnementmechanismus von Redis umfasst drei Teile: Herausgeber, Abonnenten und Kanäle.

Was nützt Redis Publish and Subscribe?

Der Herausgeber und der Abonnent sind beide Redis-Clients, und der Kanal ist der Redis-Server. Der Herausgeber sendet die Nachricht an einen bestimmten Kanal und abonniert diesen Abonnenten Der Kanal erhält diese Nachricht. Der Veröffentlichungs- und Abonnementmechanismus von Redis ähnelt dem themenbasierten Veröffentlichungs- und Abonnementmechanismus, und Channel entspricht einem Thema.

1, Jedis vorstellen

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>

2, spezifischer Implementierungscode

package com.hcmony.sword.redis;
 
import org.apache.commons.lang3.StringUtils;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPubSub;
 
/**
 * <h3>Shenjue.java基本描述</h3>
 * <p></p>
 *
 * @author hcmony
 * @since V1.0.0, 2019/05/06 20:07
 */
public class RedisMQ {
 	private static final String TOPIC="TOPIC";
 
	private final JedisPool jedisPool;
 
	public RedisMQ(JedisPool jedisPool) {
		this.jedisPool = jedisPool;
	}
 
	/**
	 * 发布消息
	 * @param topic
	 * @param messge
	 */
	public void publish(String topic ,String messge){
 
		Jedis jedis = null;
		if (StringUtils.isBlank(topic)){
			topic=TOPIC;
		}
		try {
			jedis = jedisPool.getResource();
			jedis.publish(topic,messge);
		}
		finally {
			if (null != jedis) {
				jedis.close();
			}
		}
	}
 
	/**
	 * 订阅消息
	 * @param topic
	 * @param jedisPubSub
	 */
	public void subscribe(String topic,JedisPubSub jedisPubSub){
 
		Jedis jedis = null;
		if (StringUtils.isBlank(topic)){
			topic=TOPIC;
		}
		try {
			jedis = jedisPool.getResource();
			jedis.subscribe(jedisPubSub,topic);
		}
		finally {
			if (null != jedis) {
				jedis.close();
			}
		}
	}
 
 
	public static void main(String[] args) {
		//默认连接本地redis,
		// loclhost:6379
		JedisPool jedisPool = new JedisPool();
		RedisMQ publish = new RedisMQ(jedisPool);
		new Thread(new Runnable() {
			@Override
			public void run() {
				publish.subscribe("PID",new MyjedisPubSub());
			}
		}).start();
		for (int i=0;i<100;i++){
			publish.publish("PID","messge"+i);
		}
 
	}
 
	public static class MyjedisPubSub extends JedisPubSub {
		@Override
		public void onMessage(String channel, String message) {
			System.out.println("-------channel is "+channel+" message is "+message);
		}
	}
 
}

Weitere technische Artikel zu Redis finden Sie unter Einführungs-Tutorial zur Verwendung der Redis-Datenbank Spalte zum Lernen!

Das obige ist der detaillierte Inhalt vonWas nützt Redis Publish and Subscribe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Was ist ein Redis-Knoten?Nächster Artikel:Was ist ein Redis-Knoten?