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.
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!