Redis brpoplpush

Redis brpoplpush
Redis est livré avec des dizaines de commandes intégrées pour fonctionner sur différentes structures de données telles que les listes, les hachages, les ensembles et etc. La plupart des commandes effectuent un type de travail spécifique et reviennent immédiatement. De plus, un ensemble de commandes est disponible à utiliser avec le blocage activé. Les opérations de blocage maintiennent la connexion au serveur Redis jusqu'à ce qu'un événement externe se termine. La grande chose à propos des commandes de blocage est qu'ils ne bloquent pas l'ensemble du serveur Redis, mais ils bloquent uniquement la connexion du client appelant.

Redis a plusieurs commandes de blocage qui fonctionnent sur les structures de données de liste. La commande LPOP est utilisée pour supprimer un élément de la tête d'une liste donnée. Il supprimera l'élément de tête de la liste et reviendra immédiatement. L'élément supprimé atteindra le client. Chaque fois qu'aucun éléments n'est présent dans la liste, la commande reviendra immédiatement avec une valeur nulle. Sa variante de blocage est la commande BLPOP qui maintiendra la connexion au serveur chaque fois qu'aucun éléments n'est présent dans la liste. La commande BLPOP attendra qu'au moins un élément apparaît dans la liste pour revenir. Il existe plusieurs commandes de blocage disponibles avec des listes. Dans ce guide, nous nous concentrerons sur la commande brpoplpush.

Commande redis brpoplpush

La commande brpoplpush est la variante de blocage de la commande rpoplpush. Par conséquent, la commande brpoplpush se comporte de la même manière que la commande rpoplpush lorsqu'un ou plusieurs éléments sont disponibles dans la liste source. Chaque fois qu'aucun élément unique n'est dans la liste, la commande brpoplpush contient la connexion au serveur redis jusqu'à ce qu'un élément soit disponible dans la liste source.

Syntaxe:

Brpoplpush source_list destination_list timeout

Liste des sources: La liste dont les éléments seront supprimés
destination_list: La liste dans laquelle les éléments seront poussés dans
temps libre: Le temps de bloquer la connexion et de le garder en vie.

La commande brpoplpush supprimera un élément de la queue du Liste des sources, d'abord. Ensuite, l'élément sera poussé près de la tête d'un autre Destination_list. Chaque fois que la source est vide, elle maintiendra la connexion comme indiqué dans ce qui suit:

Cette commande a une complexité de temps constante et elle a été obsolète de Redis version 6.2.0. Il est recommandé d'utiliser le Blmove commander avec DROITE et GAUCHE arguments. La commande brpoplpush renvoie l'élément qui est sorti de la source et poussé dans la destination. La sortie sera une valeur nulle si le délai d'attente est atteint.

Exemple - serveur de messagerie avec files d'attente de fiabilité

Supposons qu'un serveur de messagerie utilise des files d'attente de fiabilité pour stocker des dizaines de travaux d'arrière-plan pour une application donnée. La liste côté serveur a été utilisée pour stocker les ID de chaque travail d'arrière-plan. Plusieurs clients consomment la liste en récupérant des travaux de fond à partir de la queue.

Le plus gros inconvénient de ce processus est: s'il y a un réseau ou la défaillance de l'application client, la pièce retournée sera perdue avant le traitement à côté du client. Par conséquent, une file d'attente fiable séparée est nécessaire pour stocker l'élément éclaté de la liste des sources tout en le renvoyant au client. De plus, la liste des sources peut être vide lorsqu'il n'y a pas de travail de fond produit par les éditeurs. Par conséquent, nous avons besoin d'un moyen que la connexion du client soit maintenue et vivante jusqu'à ce qu'un travail d'arrière-plan soit disponible sur la liste des sources. La commande brpoplpush est le candidat idéal pour y parvenir.

Passons un appel au serveur Redis avec la commande brpoplpush comme indiqué dans ce qui suit. Les touches source et de destination n'existent pas.

brpoplpush backgroundjobs_list reliablequeue_list 0

Nous avons spécifié l'argument du délai d'expiration à 0, ce qui signifie que l'opération Brpoplpush sera bloquée pour toujours jusqu'à ce que vous le terminez manuellement. Maintenant, il attend qu'au moins un seul travail d'arrière-plan soit disponible dans la liste stockée à Key backgroundjobs_list.

Ensuite, nous allons pousser un travail d'arrière-plan pour le backgroundjobs_list Liste comme indiqué dans ce qui suit. Utilisons la commande lpush pour pousser un seul travail d'arrière-plan avec l'ID de «b1".

Comme prévu, l'élément «B1» a été renvoyé au client qui détenait la connexion jusqu'à ce qu'un élément soit disponible dans la liste des sources backgroundjobs_list. Inspectons la file d'attente de destination fiablequeue_list. Ici, nous utilisons le Se ranger Commande comme indiqué dans ce qui suit:

LRange reliablequeue_list 0 10

La file d'attente de destination contient l'élément «B1» qui est sorti de la liste des sources. Cette commande garantit que les éléments sont stockés dans une autre file d'attente sans les perdre lorsqu'un client s'écrase. La commande brpoplpush peut être utilisée comme liste circulaire lorsque la source et la destination sont les mêmes.

Conclusion

Pour résumer, Redis dispose de dizaines de commandes intégrées fonctionnant sur différents types de données. La plupart des commandes sont non bloquantes où la commande sera retournée immédiatement après la fin du travail. Comme discuté, plusieurs commandes de blocage intégrées sont disponibles pour fonctionner sur des types de liste. La commande brpoplpush en fait partie. Comme vous le savez déjà, c'est la variante de blocage de la commande rpoplpush. Il se comporte de la même manière que la commande rpoplpush quand au moins un seul élément est stocké dans la liste des sources. Chaque fois que la liste des sources n'existe pas, la commande brpoplpush attendra un délai d'expiration spécifié jusqu'à ce qu'un élément soit présent dans la liste source. Comme indiqué, comme il a une complexité de temps constante, très efficace à utiliser avec des files d'attente fiables dans les serveurs de messagerie.