Es gibt zu viele Anwendungsszenarien für Redis. Lassen Sie mich nun eines seiner Hauptmerkmale einführen, Abonnement (Pub/Sub) veröffentlichen.
Feature Einführung:
Was ist ein Veröffentlichungsabonnement für Redis (Pub/Sub)? Die Pub/Sub -Funktion (Mittelveröffentlichung, Abonnement) ist die Veröffentlichungs- und Abonnementfunktion. In ereignisbasierten Systemen ist Pub/Sub derzeit ein weit verbreitetes Kommunikationsmodell. Es nimmt Ereignisse als grundlegende Kommunikationsmechanismus an, um ein locker gekoppeltes Interaktionsmodell bereitzustellen, das von großen Systemen erforderlich ist: Ein Abonnent (wie ein Client) drückt ein Ereignis oder eine Art von Ereignis aus, an der es daran interessiert ist, in Form eines Veranstaltungsabonnements zu empfangen. Ein Verlag (wie ein Server) kann relevante Abonnenten über Ereignisse informieren, an denen der Abonnent jederzeit interessiert ist. Freunde, die mit Designmustern vertraut sind, sollten verstehen, dass dies dem Beobachtermuster unter den 23 Entwurfsmustern sehr ähnlich ist.
In ähnlicher Weise ist Redis 'Pub/Sub ein Nachrichtenkommunikationsmodus. Der Hauptzweck besteht darin, den Message Publisher und den Message -Abonnenten abzukoppeln. Als Pub/Sub -Server spielt Redis die Funktion des Nachrichtenroutings zwischen Abonnenten und Verlegern.
Wenn Sie die obige professionelle Erklärung nicht verstehen, spielt es keine Rolle, aber ich verstehe es nicht sehr.
Einfach ausgedrückt, gibt es hier auch ein Kanalkonzept, was Kanal bedeutet. Wenn Sie beispielsweise einen Bankkanal abonnieren, wenn sich Ihre Fonds ändern, akzeptieren Sie, dass die Bank Ihnen Informationen über ihren Kanal sendet. Hier erhalten Sie passiv, anstatt die Bank nach Informationen zu bitten. In diesem Beispiel sind Sie Sub (Abonnent) und die Bank ist Pub (Pub).
Projektanwendungsszenarien:
Ich dachte immer, bevor Sie die gleiche Technologie wussten, müssen Sie zunächst verstehen, wo eine solche Technologie verwendet wird und Sie nicht blind lernen können.
Wenn man die Funktion von Abonnements zu veröffentlichen, ist es perfekt, um ein einfaches Live -Chat -System zu erstellen. Dies ist natürlich einer von ihnen, dass solche Dinge selten an unserer Entwicklung beteiligt sind. Lassen Sie mich Ihnen ein weiteres häufig verwendetes Szenario geben. In unserer verteilten Architektur begegnen wir oft Les- und Schreiben von Trennszenarien. Während des Schreibprozesses können Sie Redis zur Veröffentlichung von Abonnements verwenden, damit die schriftlichen Werte in jedem Leseprogramm rechtzeitig veröffentlicht werden, um die vollständige Konsistenz der Daten zu gewährleisten. In einer Blog -Website abonnieren Sie beispielsweise 100 Fans Ihnen. Wenn Sie einen neuen Artikel veröffentlichen, können Sie Nachrichten an Ihre Fans weitergeben. Kurz gesagt, es gibt viele Szenen und müssen untersucht werden. .
Überprüfen Sie, wie Java Redis betreibt:
Redis ist eine Cache -Datenbank, die auch die Struktur von C/S ist, dh der Client und der Server. Im Allgemeinen verwenden wir in Java in der Regel Jedis (Client), um Redis (Server) zu betreiben. Beim Betrieb muss zwischen den beiden eine Verbindung hergestellt werden. Genau wie bei einem Datenbanklink verwalten wir in einer relationalen Datenbank im Allgemeinen einen Verbindungspool, um eine Wiederverwendung von Link zu erreichen, um Zeit für die Herstellung und Schließung von Verbindungen zu sparen. Daher gibt es in Jedis auch ein Konzept von Jedispool (Jedis Connection Pool), und wir alle verwenden Verbindungen aus dem Pool.
Auf Code:
Wenn Sie Jedis verwenden möchten, werden Sie zunächst Abhängigkeiten einführen
<De vorangestellt> <gruppe> redis.clients </Groupid> <artifactId> jedis </artifactId> <version> 2.9.0 </Version> </abhängig>
Erstellen Sie einen Verlag (Verlag)
Public Class Publisher erweitert Thread {private endgültige Jedispool Jedispool; Public Publisher (Jedispool Jedispool) {this.jedispool = jedispool; } @Override public void run () {bufferedReader reader = neuer bufferedReader (neuer InputStreamReader (System.in)); Jedis jedis = jedispool.getResource (); // eine Verbindung aus dem Verbindungspool abrufen, wobei (true) {String line = null; try {line = reader.readline (); if (! "Quit" .Equals (Zeile)) {jedis.publish ("mychannel", Zeile); // eine Nachricht aus dem Kanal von MyChannel} else {break; }} catch (ioException e) {e.printstacktrace (); }}}}Erstellen Sie einen anderen Abonnenten
Der Abonnent der öffentlichen Klasse erweitert Jedispubsub {public subscriber () {} @Override public void onMessage (String -Kanal, String -Nachricht) {// eine Nachricht und ein Anruf system.out.Out.println (string.format empfangen ("Redis veröffentlichte Nachricht, Channel %S, Message %S", Channel, Message); } @Override public void OnSubscribe (String Channel, int abonnedChannels) {// Der Channel wird nicht subscribiert system.out.println (string.format ("Redis -Kanalerfolg, Channel %s, abonnedChannels %d", Kanal, abonnierte Channel)); } @Override public void onunSubScribe (String Channel, int abonnierteChannels) {// nicht beschriebene wird system.out.println (String.Format ("nicht subscribe recrise kanal, Channel %s, abonnedChannels %d", Kanal, abonnedchannels)); }}Hier müssen Abonnenten Jedispubsub erben, um seine drei Methoden neu zu schreiben. Der Zweck Kommentar wurde geschrieben, es ist sehr einfach.
Wir definieren hier nur einen Abonnenten und gehen in den Abonnementkanal unten.
Die öffentliche Klasse Subhread erweitert Thread {private endgültige Jedispool Jedispool; private endgültige Abonnent Subscriber = neuer Abonnent (); private final String Channel = "mychannel"; public subthread (jedispool jedispool) {super ("subthread"); this.jedispool = jedispool; } @Override public void run () {System.out.println (string.format ("Redis abonnieren, Channel %s, Thread wird blockiert", Kanal)); Jedis jedis = null; try {jedis = jedispool.getResource (); // Nehmen Sie eine Verbindung auf Jedis.Subscribe (Abonnent, Kanal); // Abonnieren Sie die API abonnieren, der Parameter ist der Abonnent und der Kanalname} catch (Ausnahme E) {System.out.println (string.format ("subsrcibe -Fehler, %s", e)); } endlich {if (jedis! = null) {jedis.close (); }}}}Schließlich schreiben Sie eine weitere Testklasse und führen Sie sie aus. Geben Sie eine Nachricht auf der Tastatur ein und der Abonnent löst die OnMessage -Methode aus
öffentliche Klasse PubSubdemo {public static void main (String [] args) {// Verbindung zum Redis -Server Jedispool Jedispool = New Jedispool (New JedispoolConfig (), "127.0.1", 6379); System.out.println (String.Format ("Redis Pool startet, redis ip %s, redis port %d", "127.0.1", 6379)); Subthread subthread = new subhread (jedispool); // Abonnenten subthread.Start (); Publisher Publisher = New Publisher (Jedispool); // Publisher Publisher.start (); }}Siehe die Druckergebnisse
Fügen Sie die Codeadresse https://github.com/fangyong1421/redis bei
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.