Il y a trop de scénarios d'application pour Redis. Permettez-moi maintenant d'introduire l'une de ses principales fonctionnalités, Publish Abonnement (Pub / Sub).
Introduction des fonctionnalités:
Qu'est-ce qu'un abonnement publié pour Redis (pub / sub)? La fonction pub / sous (signifie publier, abonner) est la fonction de publication et d'abonnement. Dans les systèmes basés sur des événements, Pub / Sub est actuellement un modèle de communication largement utilisé. Il adopte les événements comme mécanisme de communication de base pour fournir un modèle d'interaction à couplage lâche requis par les systèmes à grande échelle: un abonné (comme un client) exprime un événement ou un type d'événement qu'il souhaite recevoir sous la forme d'abonnement des événements; Un éditeur (comme un serveur) peut informer les abonnés pertinents des événements que l'abonné s'intéresse à tout moment. Les amis qui connaissent les modèles de conception doivent comprendre que cela est très similaire au modèle d'observateur parmi les 23 modèles de conception.
De même, Redis's Pub / Sub est un mode de communication de messages, l'objectif principal est de découpler l'éditeur de messages et l'abonné du message. En tant que Pub / Sub Server, Redis joue la fonction du routage des messages entre les abonnés et les éditeurs.
Si vous ne comprenez pas l'explication professionnelle ci-dessus, cela n'a pas d'importance, mais je ne le comprends pas beaucoup.
Autrement dit, il y a aussi un concept de canal ici, ce qui signifie Channel. Par exemple, si vous vous abonnez à un canal bancaire, lorsque vos fonds changent, vous accepterez que la banque vous enverra des informations via son canal. Ici, vous recevez passivement, plutôt que de demander des informations à la banque. Dans cet exemple, vous êtes sub (abonné) et la banque est pub (pub).
Scénarios d'application de projet:
J'ai toujours pensé qu'avant de connaître la même technologie, vous devez d'abord comprendre où une telle technologie serait utilisée et vous ne pouvez pas apprendre les choses aveuglément.
En voyant la fonctionnalité de la publication des abonnements, il est parfait pour créer un simple système de chat en direct. C'est l'un d'eux, bien sûr, de telles choses sont rarement impliquées dans notre développement. Permettez-moi de vous donner un autre scénario couramment utilisé. Dans notre architecture distribuée, nous rencontrons souvent des scénarios de lecture et d'écriture de séparation. Pendant le processus d'écriture, vous pouvez utiliser Redis pour publier des abonnements, afin que les valeurs écrites soient publiées dans chaque programme de lecture en temps opportun, assurant la cohérence complète des données. Par exemple, sur un site Web de blog, 100 fans vous abonnent. Lorsque vous publiez un nouvel article, vous pouvez pousser des messages à vos fans. En bref, il existe de nombreuses scènes et doivent être explorées. .
Revoir comment Java exploite Redis:
Redis est une base de données de cache, qui est également la structure de C / S, c'est-à-dire le client et le serveur. D'une manière générale, en Java, nous utilisons généralement des Jedis (client) pour utiliser Redis (serveur). Lors du fonctionnement, une connexion doit être établie entre les deux. Tout comme un lien de base de données, dans une base de données relationnelle, nous maintenons généralement un pool de connexions pour réaliser la réutilisation des liens, afin de gagner du temps pour établir et clôturer les connexions. Par conséquent, dans les Jedis, il existe également un concept de Jedispool (Jedis Connection Pool), et nous utilisons tous des connexions à partir du pool.
Sur le code:
Si vous souhaitez utiliser des Jedis, vous introdurez d'abord les dépendances
<dependency> <proupId> redis.clients </proupId> <ArtefactId> Jedis </letefactive> <version> 2.9.0 </DERNIFRIGNE> </DENDENCENCE>
Créer un éditeur (éditeur)
Public Class Publisher étend Thread {private final Jedispool Jedispool; Éditeur public (Jedispool Jedispool) {this.jedispool = jedispool; } @Override public void run () {BufferedReader Reader = new BufferedReader (new InputStreamReader (System.in)); Jedis Jedis = jedispool.getResource (); // récupérer une connexion à partir du pool de connexion while (true) {String line = null; essayez {line = reader.readline (); if (! "quit" .equals (line)) {jedis.publish ("myChannel", ligne); // pousse un message de la chaîne de MyChannel} else {Break; }} catch (ioException e) {e.printStackTrace (); }}}}Créer un autre abonné
La classe publique abonnée étend JedispubSub {public abonné () {} @Override public void OnMessage (chaîne de chaîne, message de chaîne) {// reçoit un message et un système d'appel.out.println (string.format ("reçoit redis message publié, canal% s, message% s", canal, message)); } @Override public void onSubscribe (chaîne String, int abribedChannels) {// Unbrescrit à la chaîne appellera System.out.println (String.Format ("Abonnez-vous le succès du canal, canal% S, abonnésChannels% D", canal, abonné } @Override public void onunSubscribe (chaîne String, int abribedChannels) {// Unbrescrira Will appelle System.out.println (String.Format ("Désubscribe Redis Channel, Channel% S, abonnésChannels% D", canal, abonnésChannels)); }}Ici, les abonnés doivent hériter de JedispubSub pour réécrire ses trois méthodes. Le commentaire de but a été écrit, il est très simple.
Nous définissons simplement un abonné ici et allons sur le canal d'abonnement ci-dessous.
Le sous-thread de classe publique étend Thread {private final jedispool jedispool; abonné d'abonné final privé = nouveau abonné (); Channel de chaîne finale privée = "MyChannel"; Sous-thread public (Jedispool Jedispool) {super ("sous-thread"); this.jedispool = jedispool; } @Override public void run () {System.out.println (string.format ("abonnez-vous redis, canal% s, thread sera bloqué", canal)); Jedis Jedis = null; essayez {jedis = jedispool.getResource (); // éliminer une connexion Jedis.Subscribe (abonné, canal); // Abonnez-vous via l'API d'abonnement, le paramètre est l'abonné et le nom du canal} catch (exception e) {System.out.println (String.Format ("Erreur de canal subsrcibe,% s", e)); } enfin {if (Jedis! = null) {Jedis.close (); }}}}Enfin, écrivez une autre classe de test et exécutez-la. Entrez un message sur le clavier et l'abonné déclenchera la méthode OnMessage
classe publique pubSubDemo {public static void main (String [] args) {// Connexion au serveur redis jedispool jedispool = new Jedispool (new Jedispoolconfig (), "127.0.1.1", 6379); System.out.println (String.Format ("Redis Pool commence, Redis IP% S, Redis Port% D", "127.0.0.1", 6379)); Sous-thread sous-thread = nouveau sous-thread (Jedispool); // subthread abonné.Start (); Publisher Publisher = New Publisher (Jedispool); // Publisher Publisher.Start (); }}Voir les résultats de l'impression
Joignez l'adresse de code https://github.com/fangyong1421/redis
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.