Maison  >  Article  >  base de données  >  Redis peut-il être utilisé comme file d’attente de messages ?

Redis peut-il être utilisé comme file d’attente de messages ?

(*-*)浩
(*-*)浩original
2019-06-18 10:10:583580parcourir

Redis peut être utilisé non seulement comme serveur de cache, mais également comme file d'attente de messages. Son type de liste prend intrinsèquement en charge son utilisation comme file d'attente de messages.

Redis peut-il être utilisé comme file d’attente de messages ?

Étant donné que la liste Redis est implémentée à l'aide d'une liste doublement chaînée et enregistre les nœuds de tête et de queue, il est très difficile d'insérer des éléments des deux côtés de la liste. (Apprentissage recommandé : Tutoriel vidéo Redis)

Vous pouvez donc directement utiliser la liste de Redis pour implémenter la file d'attente de messages, avec seulement deux instructions simples : lpush et rpop ou rpush et lpop.

Cependant, il y a un problème avec les consommateurs de messages, c'est-à-dire qu'ils doivent constamment appeler la méthode rpop pour vérifier s'il y a des messages en attente dans la liste. Chaque appel établira une connexion, ce qui entraînera un gaspillage inutile. Peut-être utiliserez-vous Thread.sleep() et d'autres méthodes pour laisser le thread consommateur consommer à nouveau après un certain temps, mais cela pose deux problèmes :

1) Si la vitesse du producteur est supérieure à celle du consommateur vitesse de consommation, la file d'attente des messages La longueur continuera d'augmenter et occupera beaucoup d'espace mémoire au fil du temps.

2) Si le temps de veille est trop long, certains messages urgents ne peuvent pas être traités. Si le temps de veille est trop court, cela entraînera également une surcharge relativement importante sur la connexion.

Vous pouvez donc utiliser la commande brpop. Cette commande ne retournera que s'il y a un élément. S'il n'y a pas d'élément, elle se bloquera jusqu'à ce que le délai d'attente renvoie null. Vous pourrez ensuite exécuter Customer et effacer la console. Je peux voir que le programme n'a aucune sortie et est bloqué. Vous avez brpop ici. Ensuite, ouvrez le client Redis et entrez dans la liste des clients de commande pour voir qu'il existe actuellement deux connexions.

En plus de prendre en charge les files d'attente de messages, Redis fournit également un ensemble de commandes pour prendre en charge le mode publication/abonnement.

1) Publier

L'instruction PUBLISH peut être utilisée pour publier un message, le format est PUBLISH canal message

La valeur de retour indique le numéro d'abonnés au message.

2) Abonnement

L'instruction SUBSCRIBE permet de recevoir un message au format canal SUBSCRIBE

Vous pouvez voir que le mode abonnement a été entré après avoir utilisé l'instruction SUBSCRIBE, mais le message de publication n'a pas été reçu, car l'abonnement ne le recevra pas tant que le message n'aura pas été envoyé. Pour les autres commandes de ce mode, seules les réponses sont visibles.

Les réponses sont divisées en trois types :

1. S'il s'agit d'un abonnement, la deuxième valeur indique la chaîne à laquelle vous êtes abonné, et la troisième valeur indique de quel abonnement il s'agit. Canal ? (compris comme un numéro de série ?)

2 S'il s'agit d'un message, la deuxième valeur est le canal qui a généré le message, et la troisième valeur est le message

3. Pour le désabonnement, la deuxième valeur représente le canal désabonné et la troisième valeur représente le nombre actuel d'abonnements clients.

Vous pouvez utiliser la commande UNSUBSCRIBE pour vous désabonner. Si aucun paramètre n'est ajouté, toutes les chaînes auxquelles vous êtes abonné par la commande SUBSCRIBE seront désabonnées.

Redis prend également en charge l'abonnement aux messages basé sur des caractères génériques, à l'aide de la commande PSUBSCRIBE (pattern Subscribe).

Vous pouvez voir que la commande de publication renvoie 2 et que l'abonné a reçu le message deux fois. En effet, la commande PSUBSCRIBE peut s'abonner au canal à plusieurs reprises. Les chaînes souscrites à l'aide de la commande PSUBSCRIBE doivent également être désabonnées à l'aide de la commande PUNSUBSCRIBE. Cette commande ne peut pas se désinscrire des chaînes souscrites par SUBSCRIBE. De même, UNSUBSCRIBE ne peut pas se désinscrire des chaînes souscrites par la commande PSUBSCRIBE. Dans le même temps, le caractère générique de l’instruction PUNSUBSCRIBE ne sera pas étendu.

Résumé :

L'utilisation de la structure de données List de Redis peut facilement et rapidement créer une file d'attente de messages. En même temps, les instructions BRPOP et BLPOP fournies par Redis résolvent. le problème des appels fréquents aux Jedis. Le gaspillage de ressources causé par les méthodes rpop et lpop. De plus, Redis fournit des instructions pour le mode publication/abonnement, qui peuvent réaliser la transmission de messages et la communication inter-processus.

Pour plus d'articles techniques liés à Redis, veuillez visiter la colonne Introduction au didacticiel d'utilisation de la base de données Redis pour apprendre !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn