Existem muitos cenários de aplicação para Redis. Agora, deixe -me apresentar um de seus principais recursos, publicar assinatura (pub/sub).
Introdução ao recurso:
O que é uma assinatura de publicação para redis (pub/sub)? O pub/sub função (significa publicar, assinar) é a função de publicação e assinatura. Nos sistemas baseados em eventos, o pub/sub é atualmente amplamente utilizado com o modelo de comunicação. Ele adota eventos como o mecanismo de comunicação básica para fornecer um modelo de interação vagamente acoplado exigido pelos sistemas em larga escala: um assinante (como um cliente) expressa um evento ou um tipo de evento que está interessado em receber na forma de assinatura do evento; Um editor (como um servidor) pode notificar assinantes relevantes de eventos nos quais o assinante está interessado a qualquer momento. Amigos familiarizados com os padrões de design devem entender que isso é muito semelhante ao padrão de observador entre os 23 padrões de design.
Da mesma forma, o Pub/Sub da Redis é um modo de comunicação de mensagens, o principal objetivo é descobrir o editor de mensagens e o assinante de mensagens. Como um servidor pub/sub, Redis desempenha a função do roteamento de mensagens entre assinantes e editores.
Se você não entende a explicação profissional acima, não importa, mas não entendo muito.
Simplificando, há também um conceito de canal aqui, que significa canal. Por exemplo, se você se inscrever em um canal de banco, quando seus fundos mudarem, aceitará que o banco enviará informações por meio de seu canal. Aqui, você está recebendo passivamente, em vez de pedir informações ao banco. Neste exemplo, você é sub (assinante) e o banco é o pub (pub).
Cenários de aplicativos de projeto:
Eu sempre pensei que antes que você soubesse a mesma tecnologia, você deve primeiro entender onde essa tecnologia será usada e não pode aprender as coisas cegamente.
Vendo o recurso de publicação de assinaturas, é perfeito para criar um sistema de bate -papo ao vivo simples. Esse é um deles, é claro, essas coisas raramente estão envolvidas em nosso desenvolvimento. Deixe -me dar a você outro cenário comumente usado. Em nossa arquitetura distribuída, geralmente encontramos cenários de separação de leitura e gravação. Durante o processo de escrita, você pode usar o Redis para publicar assinaturas, para que os valores escritos sejam publicados em cada programa de leitura em tempo hábil, garantindo a consistência completa dos dados. Por exemplo, em um site de blog, 100 fãs assinam você. Ao postar um novo artigo, você pode empurrar mensagens para seus fãs. Em suma, há muitas cenas e precisam ser exploradas. .
Revise como o Java opera Redis:
Redis é um banco de dados de cache, que também é a estrutura de C/S, ou seja, o cliente e o servidor. De um modo geral, em Java, geralmente usamos Jedis (cliente) para operar o Redis (servidor). Ao operar, uma conexão deve ser estabelecida entre os dois. Assim como um link de banco de dados, em um banco de dados relacional, geralmente mantemos um pool de conexões para obter a reutilização do link, de modo a economizar tempo para estabelecer e fechar conexões. Portanto, em Jedis, há também um conceito de Jedispool (Jedis Connection Pool) e todos usamos conexões do pool.
No código:
Se você quiser usar Jedis, primeiro apresentará dependências
<Depencency> <PuerpId> redis.clients </frupid> <stifactId> jedis </artifactId> <versão> 2.9.0 </versão> </dependency>
Crie um editor (editor)
Public Publisher estende thread {private final Jedispool Jedispool; editor público (Jedispool Jedispool) {this.jedispool = jedispool; } @Override public void run () {buffarredreader leitor = new BufferredReader (new InputStreamReader (System.in)); Jedis jedis = jedispool.getResource (); // busca uma conexão no pool de conexão while (true) {string line = null; tente {line = reader.readline (); if (! "Quit" .Equals (Line)) {jedis.publish ("myChannel", linha); // empurre uma mensagem do canal do MyChannel} else {break; }} catch (ioexception e) {e.printStackTrace (); }}}}Crie outro assinante
A classe pública assinante estende Jedispubsub {public assalscRer () {} @Override public void onMessage (canal de string, string message) {// Receba uma mensagem e chamada System.out.println (string.format ("Receba Redis publicou Mensagem, Channel %s, Mensagem %S", canal, mensagem)); } @Override public void onSubscribe (canal de String, int subscristingChannels) {// não está substituído no canal chamará o System.out.println (String.Format ("Subscribe Redis Channel Success, Channel %s, subscritedChannels %d", canal, subcritorsedChannels)); } @Override public void onUNSubscribe (canal de string, int subscristedChannels) {// cancelado de inscrição chamará System.out.println (String.Format ("Descrenda o canal Redis, canal, %s, subscritedChannels %d", canal, canal, cenários de assinatura)); }}Aqui, os assinantes precisam herdar Jedispubsub para reescrever seus três métodos. O comentário de propósito foi escrito, é muito simples.
Acabamos de definir um assinante aqui e irmos para o canal de assinatura abaixo.
classe pública Subthread estende thread {private final Jedispool Jedispool; assinante final do assinante final = novo assinante (); String final privado canal = "myChannel"; public subthread (Jedispool Jedispool) {super ("subthRead"); this.jedispool = jedispool; } @Override public void run () {System.out.println (string.format ("assine redis, canal %s, thread será bloqueado", canal)); Jedis jedis = nulo; tente {jedis = jedispool.getResource (); // retire uma conexão jedis.subscribe (assinante, canal); // Inscreva -se através da API de inscrição, o parâmetro é o assinante e o nome do canal} Catch (Exceção e) {System.out.println (String.Format ("Erro de canal subsrcibe, %s", e)); } finalmente {if (jedis! = null) {jedis.close (); }}}}Por fim, escreva outra aula de teste e execute -a. Digite uma mensagem no teclado e o assinante acionará o método OnMessage
classe pública pubsubdemo {public static void main (string [] args) {// conecta -se ao servidor Redis Jedispool Jedispool = novo Jedispool (New JedispoolConfig (), "127.0.0.1", 6379); System.out.println (String.Format ("Redis Pool está começando, Redis IP %S, Redis Port %D", "127.0.0.1", 6379)); Subthread subthread = novo subthread (Jedispool); // assinante subthread.start (); Editor editor = novo editor (Jedispool); // Publisher Publisher.start (); }}Veja os resultados da impressão
Anexe o endereço do código https://github.com/fangyong1421/redis
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.