Redis xack

Redis xack
Redis comprend des types de données communs comme les chaînes, les listes, le hashmap et les ensembles. De plus, il prend en charge des structures de données plus complexes comme les flux. Il a été introduit à partir de la version 5 redis.0. Le type de flux est basé sur la structure de données de journal largement connue. Par conséquent, Redis Streams utilise la technique APPENDE uniquement dans leur implémentation de base.

Les données du flux sont immuables. Les nouvelles données ne peuvent être annexées qu'à la fin du flux. Redis Streams peut contenir des entrées qui ne sont pas seulement des chaînes. Chaque entrée peut contenir une ou plusieurs paires de valeurs de champ comme dans Redis Hashs. Ces entrées ont un ID unique pour les identifier dans le flux, similaire aux numéros de ligne ou aux décalages d'octets utilisés dans un fichier journal. L'illustration suivante fournira une meilleure compréhension de ce à quoi ressemble le flux Redis:

La commande XADD est utilisée pour ajouter des entrées à un flux donné qui est simple. Le mécanisme d'accès aux données est différent avec les types de flux par rapport à d'autres types. Le principal avantage des flux est qu'ils peuvent pousser les messages nouvellement annexés vers plusieurs clients ou consommateurs. Ce n'est qu'une façon de regarder les flux redis. De plus, nous pouvons le voir comme un magasin de séries chronologiques où vous pouvez itérer sur tout le flux pour récupérer toutes les entrées pour un délai donné.

Redis Stream Consumer Groupes

Comme mentionné, les flux Redis permettent à plusieurs consommateurs de lire des données. De plus, il étend cette fonctionnalité à un niveau d'accès à un sous-ensemble des messages de flux par différents consommateurs. Chaque consommateur attrapera des données différentes à traiter, tandis que Kafka implémente le même comportement avec les groupes de consommateurs. La technique des groupes de consommateurs est disponible dans les flux Redis qui permettent de distribuer les données de flux données entre plusieurs consommateurs.

Nous pouvons utiliser la commande xReadGroup pour lire les données via un groupe de consommateurs. Chaque groupe de consommateurs peut contenir plusieurs consommateurs identifiés par un nom unique.

La commande xack

Comme mentionné précédemment, les consommateurs d'un groupe de consommateurs reçoivent des messages du flux où les ID de message sont supérieurs à la dernière pièce d'identité livrée. Lors de la livraison d'un message à un consommateur, son statut sera réglé en attente et stocké dans la liste des entrées en attente d'un groupe de consommation (PEL). C'est un effet secondaire d'appeler les commandes XREadGroup ou Xclaim. Cela ferait toujours que le serveur renvoie les messages en attente chaque fois que vous appelez un appel en utilisant la commande xReadGroup pour récupérer l'historique des messages par consommateur. Par conséquent, les groupes de consommateurs Redis ont introduit un processus de reconnaissance de message. La commande xack peut informer le serveur qu'un message récupéré a été traité avec succès. Il supprimerait l'entrée d'un tel message dans le pel.

Syntaxe

Xack

La commande xack renvoie le nombre d'entrées reconnues comme une réponse.

Exemple: Load Balancer sert différents clients de plusieurs nœuds de serveur

Regardons un scénario du monde réel où un équilibreur de charge se lit à partir d'un flux d'adresses IP du client et sert chaque client à partir de différents nœuds de serveur. Nous pouvons considérer cela comme un groupe de consommateurs qui lit un flux Redis où le groupe contient plusieurs nœuds de consommation.

Tout d'abord, nous devons créer un groupe de consommateurs auquel appartient chaque nœud de serveur. Nous pouvons utiliser la commande xGroup suivante pour créer un groupe de consommateurs pour un flux donné:

Xgroup Créer iPaddressStream ukserverGroup $ mkstream

La commande est explicite, où le iPaddressstream a un nouveau groupe de consommateurs appelé ukservergroup qui ne fournit que les derniers messages disponibles pour le flux lorsqu'un consommateur est connecté. Il crée également le iPaddressstream flux parce que le Mkstream Le paramètre a été spécifié.

Ensuite, nous devons ajouter plusieurs adresses IP au iPaddressstream créé précédemment à l'aide de la commande redis XADD suivante:

XADD iPaddressStream * IP 123.456.12.1
XADD iPaddressStream * IP 223.400.000.100
XADD iPaddressStream * IP 010.333.200.090
XADD iPaddressStream * IP 320.333.220.200
XADD iPADdressStream * IP 212.111.111.222

Sortie après chaque commande:

Cela ajouterait 5 entrées au iPaddressstream flux. Chaque entrée est attribuée à un ID unique généré par le serveur qui est retourné après avoir appelé la commande XADD.

Maintenant, lions le iPaddressstream via le ukservergroup Le consommateur a appelé serveur0.

XreadGroup Group ukserverGroup Server0 Count 2 Streams iPaddressStream>

Sortir

Comme prévu, le serveur0 Le consommateur reçoit deux nouveaux messages de la iPaddressstream flux. Ces deux adresses IP ont été ajoutées à la liste des entrées en attente. Si nous appelons la commande xreadgroup avec le 0 ID, il renverra les messages en attente pour le serveur0 consommateur.

XreadGroup Group UkserverGroup Server0 Streams iPaddressStream 0

Sortir

Cela signifie que le serveur attend toujours le serveur0 consommateur pour reconnaître ces deux messages. Remercions les messages pour le serveur0 consommateur utilisant la commande xack suivante.

Xack iPaddressStream UkserverGroup 1656192378464-0 1656192389344-0

Ici, nous reconnaissons les deux entrées identifiées par les ID respectifs. La commande renvoie également le nombre des messages traités avec succès. C'est deux dans ce cas.

Sortir

Après le processus précédent, ces deux messages auraient dû être supprimés de la liste des entrées en attente (PEL). D'où le serveur0 Le consommateur ne renverra aucun message en attente en appelant la commande xReadGroup via le groupe de consommateurs ukservergroup.

XreadGroup Group UkserverGroup Server0 Streams iPaddressStream 0

Sortir

Il renvoie un tableau vide qui signifie aucun message en attente pour ce consommateur. La fonction de reconnaissance du message est très utile dans ces types de scénarios.

Conclusion

Redis est livré avec le type de données du flux dont l'implémentation sous-jacente est basée sur la structure des données du journal. Par conséquent, les nouvelles entrées sont annexées à la fin du flux. Le plus grand avantage est que plusieurs consommateurs peuvent interroger les derniers messages ajoutés au flux. De plus, la technique du groupe de consommateurs Redis permet au flux de lecture par un groupe de consommateurs où chaque consommateur ne voit qu'un sous-ensemble des messages du flux. En lisant l'entrée d'un consommateur à partir du flux, une telle entrée est ajoutée à la liste des entrées en attente. Par conséquent, le consommateur doit reconnaître chacun des messages en attente. Il informera le serveur de supprimer l'entrée de PEL et de libérer la mémoire. La commande xack peut être utilisée pour reconnaître les messages Redis Stream. Il prend en charge la reconnaissance de plusieurs messages à la fois.