47 votes

Qu'est-ce que Redis pubsub et comment l'utiliser ?

Quelqu'un m'a demandé ce qu'était PubSub et comment créer un canal (dans un commentaire de ma réponse ) et je l'ai orienté vers l'article sur redis.io => http://redis.io/topics/pubsub . Je pense que c'est assez clair, mais je me demande si quelqu'un a une meilleure explication. Idéalement, décrivez-la clairement en utilisant redis-cli .

109voto

Aashay Desai Points 642

Publish/subscribe est un paradigme assez simple. Pensez-y comme si vous dirigiez un talk-show sur une station de radio. C'est PUBLIER. Vous espérez qu'au moins une ou plusieurs personnes capteront votre chaîne pour écouter vos messages dans l'émission de radio (ABONNEMENT) et peut-être même pour faire quelque chose, mais vous ne parlez pas aux gens. directement .

Amusons-nous un peu avec redis-cli !

redis 127.0.0.1:6379> PUBLISH myradioshow "Good morning everyone!"
(integer) 0
redis 127.0.0.1:6379> PUBLISH myradioshow "How ya'll doin tonight?"
(integer) 0
redis 127.0.0.1:6379> PUBLISH myradioshow "Hello? Is anyone listening? I'm not wearing pants."
(integer) 0

Remarquez qu'il n'y a aucun client qui reçoit les messages sur votre canal "myradioshow" (c'est le 0 dans la réponse). Personne n'écoute. Maintenant, ouvrez un autre redis-cli (ou pour plus de fun, demandez à un ami d'ouvrir son redis-cli et de se connecter à votre serveur) et SUBSCRIBE au canal :

redis 127.0.0.1:6379> SUBSCRIBE myradioshow
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "myradioshow"
3) (integer) 1

Retournez à votre redis-cli original et continuez votre spectacle :

redis 127.0.0.1:6379> PUBLISH myradioshow "Next caller gets a free loaf of bread!"
(integer) 1

Vous avez remarqué le "1" à la fin ? Vous avez un auditeur ! Comme par magie, dans votre terminal SUBSCRIBE-d :

1) "message"
2) "myradioshow"
3) "Next caller gets a free loaf of bread!"

Bien sûr, dans la réalité, vous voudrez probablement faire des choses plus utiles que d'informer vos clients de votre mode de vie sans pantalon, comme déclencher des événements sur votre serveur ou exécuter des tâches. Mais peut-être pas ! :)

3 votes

Pourquoi l'abonné reçoit-il "subscribe" et "myradioshow" comme messages au lieu de "Good morning everyone !" etc.

8 votes

Il s'agit de messages de confirmation de Redis sous la forme d'une réponse groupée, vous indiquant ce qu'il a fait et ce à quoi il s'est abonné, et le 1 indique une réponse positive. Voir ici : redis.io/commandes/subscribe . Dans mon exemple, le SUBSCRIBE intervient après que les premiers messages ont été publiés, de sorte qu'ils ne reçoivent pas "Bonjour tout le monde !" etc. parce que ces messages ont déjà disparu. En d'autres termes, SUBSCRIBE ne reçoit que les messages publiés qui sont publiés après l'abonnement (en d'autres termes, il ne s'agit pas d'une file d'attente).

0 votes

@AashayDesai un scénario commun quand on veut/doit utiliser publish & subscribe serait utile.

3voto

Kamegohan Points 11

En complément de la réponse fournie par Aashay Desai Je tiens à préciser que j'ai atterri ici, à la recherche de cette partie exacte :

comment créer un canal

Je me suis toujours demandé où trouver le nom de la chaîne que je peux utiliser pour PUBLISH de. Il n'y a aucune source indiquant que la chaîne à laquelle vous faites référence est celle qui a été utilisée dans le cadre de l'enquête sur le crime organisé. PUBLISH -déclaration.

Pour être clair : en utilisant le site PUBLISH déclaration, vous créez le canal .

Pour un développeur un peu plus expérimenté, cela s'explique peut-être par soi-même, mais du point de vue d'un débutant, même 10 ans après avoir répondu à cette question ici, je ne suis pas tombé sur une seule source/documentation qui l'indique explicitement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X