Hay demasiados escenarios de aplicación para Redis. Ahora permítanme presentar una de sus principales características, publicar suscripción (pub/sub).
Introducción a la característica:
¿Qué es una suscripción de publicación para Redis (pub/sub)? La función pub/sub (significa publicar, suscribirse) es la función de publicación y suscripción. En los sistemas basados en eventos, PUB/SUM es actualmente un modelo de comunicación ampliamente utilizado. Adopta los eventos como el mecanismo de comunicación básico para proporcionar un modelo de interacción poco acoplado requerido por los sistemas a gran escala: un suscriptor (como un cliente) expresa un evento o un tipo de evento que está interesado en recibir en forma de suscripción de eventos; Un editor (como un servidor) puede notificar a los suscriptores relevantes de los eventos que el suscriptor está interesado en cualquier momento. Los amigos que están familiarizados con los patrones de diseño deben entender que esto es muy similar al patrón de observador entre los 23 patrones de diseño.
Del mismo modo, Redis's Pub/Sub es un modo de comunicación de mensajes, el objetivo principal es desacoplar el editor de mensajes y el suscriptor de mensajes. Como servidor de pub/sub, Redis reproduce la función del enrutamiento de mensajes entre suscriptores y editores.
Si no comprende la explicación profesional anterior, no importa, pero no lo entiendo mucho.
En pocas palabras, también hay un concepto de canal aquí, que significa canal. Por ejemplo, si se suscribe a un canal bancario, cuando sus fondos cambian, aceptará que el banco le enviará información a través de su canal. Aquí, está recibiendo pasivamente, en lugar de pedirle información al banco. En este ejemplo, usted es Sub (suscriptor), y el banco es pub (pub).
Escenarios de aplicación del proyecto:
Siempre pensé que antes de que supieras la misma tecnología, primero debes entender dónde se usará dicha tecnología y no puedes aprender las cosas a ciegas.
Al ver la característica de publicar suscripciones, es perfecto para hacer un sistema de chat en vivo simple. Esta es una de ellas, por supuesto, tales cosas rara vez están involucradas en nuestro desarrollo. Déjame darte otro escenario comúnmente utilizado. En nuestra arquitectura distribuida, a menudo nos encontramos con escenarios de separación de lectura y escritura. Durante el proceso de escritura, puede usar Redis para publicar suscripciones, de modo que los valores escritos se publican en cada programa de lectura de manera oportuna, asegurando la consistencia completa de los datos. Por ejemplo, en un sitio web de blog, 100 fanáticos se suscriben a usted. Cuando publicas un nuevo artículo, puedes enviar mensajes a tus fanáticos. En resumen, hay muchas escenas y es necesario explorar. .
Revise cómo opera Java Redis:
Redis es una base de datos de caché, que también es la estructura de C/S, es decir, el cliente y el servidor. En términos generales, en Java, generalmente usamos JEDIS (cliente) para operar Redis (servidor). Cuando se opera, se debe establecer una conexión entre los dos. Al igual que un enlace de base de datos, en una base de datos relacional, generalmente mantenemos un grupo de conexión para lograr la reutilización de enlaces, para ahorrar tiempo para establecer y cerrar conexiones. Por lo tanto, en JEDIS, también hay un concepto de Jedispool (grupo de conexión de Jedis), y todos usamos conexiones desde la piscina.
En el código:
Si desea usar JEDIS, primero introducirá dependencias
<Spendency> <MoupRoD> Redis.Clients </GroupId> <SartifactId> JEDIS </artifactid> <versión> 2.9.0 </versewerency>
Crear un editor (editor)
El editor de clase pública extiende el hilo {Private Final Jedispool Jedispool; editor público (Jedispool Jedispool) {this.jedispool = jedispool; } @Override public void run () {BufferedReader Reader = new BufferedReader (new InputStreamReader (System.in)); JEDIS JEDIS = JEDISPOOL.GETRESOURCE (); // obtener una conexión desde el grupo de conexión mientras (true) {string line = null; intente {line = Reader.ReadLine (); if (! "salir" .equals (línea)) {jedis.publish ("mychannel", línea); // Empuje un mensaje del canal de MyChannel} else {break; }} catch (ioException e) {E.PrintStackTrace (); }}}}Crear otro suscriptor
El suscriptor de clase pública extiende JEdispubSub {public suscriper () {} @Override public void onMessage (canal de cadena, string Mensaje) {// Recibe un mensaje y llame a System.out.println (string.format ("Recibe un mensaje publicado Redis, canal %s, mensaje %s", canal, mensaje)); } @Override public void onSubScribe (canal de cadena, int suscriptedChannels) {// sin suscribir al canal llamará a System.out.println (String.Format ("Suscríbete el éxito del canal Redis, canal %s, suscriptedChannels %d", canal, suscriptCannels)); } @Override public void onunSubscribe (canal de cadena, int suscriptedchannels) {// sin suscripción llamará a system.out.println (string.format ("Unscrite Redis Channel, canal %s, suscriptedChannels %d", canal, suscriptCannels)); }}Aquí, los suscriptores deben heredar Jedispubsub para reescribir sus tres métodos. El comentario del propósito ha sido escrito, es muy simple.
Simplemente definimos un suscriptor aquí y vamos al canal de suscripción a continuación.
Subcread de clase pública extiende el hilo {Private Final Jedispool Jedispool; suscriptor de suscriptor final privado = nuevo suscriptor (); canal de cadena final privada = "mychannel"; Subcread público (Jedispool Jedispool) {super ("subcread"); this.jedispool = jedispool; } @Override public void run () {system.out.println (string.format ("suscríbete redis, canal %s, hilo se bloqueará", canal)); JEDIS JEDIS = NULL; intente {jEdis = jedispool.getResource (); // Eliminar una conexión Jedis.Subscribe (suscriptor, canal); // suscribirse a través de la API de suscripción, el parámetro es el suscriptor y el nombre del canal} Catch (Exception E) {System.out.println (String.Format ("Error de canal SUNSRCIBE, %s", e)); } finalmente {if (jEdis! = null) {jedis.close (); }}}}Finalmente, escriba otra clase de prueba y ejecutala. Ingrese un mensaje en el teclado y el suscriptor activará el método OnMessage
Public Class PubSubDemo {public static void main (String [] args) {// Conéctate al servidor Redis JEDISPOOL JEDISPOOL = new JEdispool (new JediscoolConfig (), "127.0.0.1", 6379); System.out.println (String.format ("Redis Pool está comenzando, Redis IP %S, Redis Port %D", "127.0.0.1", 6379)); Subcread subtread = nuevo subcread (JEdispool); // suscriptor subcread.start (); Publisher Publisher = New Publisher (JEDISpool); // Publisher Publisher.start (); }}Ver los resultados de la impresión
Adjunte la dirección del código https://github.com/fangyong1421/redis
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.