Maison  >  Article  >  base de données  >  A quoi sert Redis Publier et s'abonner ?

A quoi sert Redis Publier et s'abonner ?

(*-*)浩
(*-*)浩original
2019-11-22 10:50:102600parcourir

A quoi sert Redis Publier et s'abonner ?

Redis publier et s'abonner (pub/sub) est un modèle de communication par message : l'expéditeur (pub) envoie des messages et les abonnés (sub) reçoivent des messages.

Les clients Redis peuvent s'abonner à n'importe quel nombre de chaînes. (Apprentissage recommandé : Tutoriel vidéo Redis)

Redis fournit une fonction de publication et d'abonnement, qui peut être utilisée pour la transmission de messages. Le mécanisme de publication et d'abonnement de Redis comprend trois parties, éditeur, abonnés et chaînes.

A quoi sert Redis Publier et sabonner ?

L'éditeur et l'abonné sont tous deux des clients Redis, et Channel est le serveur Redis. L'éditeur envoie le message à un certain canal et s'abonne à cet abonné. la chaîne recevra ce message. Le mécanisme de publication et d'abonnement de Redis est similaire à la publication et à l'abonnement basés sur un sujet, et Channel est équivalent à un sujet.

1, présentez Jedis

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

2, code d'implémentation spécifique

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);
		}
	}
 
}

Pour plus d'articles techniques liés à Redis, veuillez visiter Tutoriel d'introduction à l'utilisation de la base de données Redis colonne pour apprendre !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Qu'est-ce que le nœud RedisArticle suivant:Qu'est-ce que le nœud Redis