Redis: exemple d'utilisation de la commande de file d'attente de messages de flux

table des matières

XADD

XTRIM

XREAD

XGROUP

GROUPE XREADGROUP


​​​​​​​

Redis Stream est une structure de données nouvellement ajoutée dans la version Redis 5.0.

Redis Stream est principalement utilisé pour les files d'attente de messages (MQ, Message Queue). Redis lui-même dispose d'une fonction de publication et d'abonnement Redis (pub / sub) pour implémenter la fonction de file d'attente de messages, mais il présente l'inconvénient que le message ne peut pas être conservé. une déconnexion du réseau, un temps d'arrêt Redis, etc., le message sera ignoré.

En termes simples, publier et souscrire (pub / sous) peut distribuer des messages, mais ne peut pas enregistrer les messages historiques.

Redis Stream fournit des fonctions de persistance des messages et de réplication de sauvegarde principale, permettant à tout client d'accéder aux données à tout moment, de se souvenir de l'emplacement d'accès de chaque client et de garantir que le message n'est pas perdu.

La structure de Redis Stream est la suivante. Il possède une liste de messages liés, qui relie tous les messages ajoutés ensemble. Chaque message a un ID unique et le contenu correspondant:

Chaque flux a un nom unique, qui est la clé Redis, qui est automatiquement créée lorsque nous utilisons la commande xadd pour ajouter un message pour la première fois.

Analyse de l'image ci-dessus:

  • Groupe de consommateurs  : groupe de consommateurs, créé à l'aide de la commande XGROUP CREATE, un groupe de consommateurs a plusieurs consommateurs (consommateurs).
  • last_delivered_id  : curseur, chaque groupe de consommateurs aura un curseur last_delivered_id, tout consommateur lisant le message fera avancer le curseur last_delivered_id.
  • pending_ids  : variables d'état des consommateurs (Consumer), qui sont utilisées pour conserver les identifiants non confirmés des consommateurs. pending_ids enregistre les messages actuellement lus par le client, mais il n'y a pas d'acquittement (caractère d'acquittement).

XADD

Utilisez XADD pour ajouter des messages à la file d'attente. Si la file d'attente spécifiée n'existe pas, créez une file d'attente. Format de syntaxe XADD:

XADD key ID field value [field value ...]
  • clé  : le nom de la file d'attente, créez-la si elle n'existe pas
  • ID  : L'identifiant du message, nous utilisons * pour indiquer qu'il est généré par redis et peut être personnalisé, mais il faut s'assurer qu'il est incrémentiel.
  • valeur de champ  : enregistrement. 

Xdel et xlength ne seront pas beaucoup introduits, introduisons xtrim.

XTRIM

xtrim coupe le flux en expulsant les anciennes entrées (entrées avec des ID inférieurs).

Le flux peut être élagué en utilisant l'une des stratégies suivantes:

  • MAXLEN: Tant que la longueur du flux dépasse la valeur spécifiée threshold, l' thresholdentrée sera éjectée, qui est un entier positif.
  • MINID: Supprimez les entrées thresholdavec des ID inférieurs , où thresholdest l'ID de flux.

Par exemple, cela réduira le flux aux 1000 derniers éléments:

XTRIM mystream MAXLEN 1000

Dans cet exemple, toutes les entrées avec des ID inférieurs à 649085820-0 seront supprimées:

XTRIM mystream MINID 649085820

Par défaut, ou lorsque des paramètres facultatifs sont fournis, la commande effectuera un découpage précis.

Selon la stratégie, un rognage précis signifie:

  • MAXLEN: La longueur du flux coupé sera exactement le minimum entre sa longueur d'origine et la longueur spécifiée threshold.
  • MINID: L'ID le plus ancien du flux est exactement la plus petite valeur entre son ID le plus ancien et la valeur spécifiée threshold.

XREAD

Utilisez XREAD pour obtenir la liste de messages de manière bloquante ou non bloquante, le format de syntaxe:

XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] id [id ...]
  • count  : nombre
  • millisecondes  : facultatif, le nombre de millisecondes à bloquer, s'il n'est pas défini, il est non bloquant
  • key  : le nom de la file d'attente
  • id  : identifiant du message

Parfois, lors du blocage, nous voulons uniquement recevoir les entrées ajoutées au flux via xadd à partir du moment du blocage. Dans ce cas, nous ne sommes pas intéressés par l'historique des éléments ajoutés. Dans ce cas, nous utiliserons $

Ci-dessus, nous allons récupérer les données ajoutées au flux à partir du moment du blocage.

XGROUP

Utilisez cette commande pour gérer les groupes de consommateurs associés à la structure de données de flux, vous pouvez:

  • Créez un nouveau groupe de consommateurs associé au flux.
  • Éliminez un groupe de consommateurs.
  • Supprimez un consommateur spécifique du groupe de consommateurs.
  • Définissez le dernier ID livré du groupe de consommateurs sur un autre nom.

Pour créer un nouveau groupe de consommateurs, utilisez le formulaire suivant:

XGROUP CREATE mystream consumer-group-name $

Le dernier paramètre est l'ID du dernier élément à prendre en compte pour la livraison dans le flux. Dans le cas ci-dessus, nous utilisons l'ID spécial '$' (ce qui signifie: l'ID du dernier élément du flux). Dans ce cas, les consommateurs qui obtiennent des données de ce groupe de consommateurs ne verront que de nouveaux éléments arriver dans le flux.

Inversement, si vous souhaitez que le consommateur obtienne l'intégralité de l'historique du flux, utilisez zéro comme ID de départ du groupe de consommateurs:

XGROUP CREATE mystream consumer-group-name 0

Bien entendu, tout autre identifiant valide peut également être utilisé. Si le groupe d'utilisateurs spécifié existe déjà, la commande renverra -BUSYGROUPune erreur. Sinon, effectuez l'opération et retournez OK. Il n'y a pas de limite stricte sur le nombre de groupes de consommateurs pouvant être associés à un flux donné.

Si le flux spécifié lors de la création du groupe n'existe pas, une erreur sera renvoyée. Vous pouvez utiliser la MKSTREAMsous-commande facultative comme dernier paramètre IDpour créer automatiquement un flux s'il n'existe pas. Notez que si le flux est créé de cette façon, sa longueur sera de 0:

XGROUP CREATE mystream consumer-group-name $ MKSTREAM

Un groupe de consommateurs peut être complètement détruit en utilisant le formulaire suivant:

XGROUP DESTROY mystream consumer-group-name

Même s'il y a des consommateurs actifs et des messages en attente, le groupe de consommateurs sera détruit, alors assurez-vous d'appeler cette commande uniquement lorsque vous en avez vraiment besoin.

Chaque fois qu'une commande mentionne un nouveau nom de consommateur, le consommateur du groupe de consommateurs est automatiquement créé. Ils peuvent également être créés explicitement à l'aide du formulaire suivant:

XGROUP CREATECONSUMER mystream consumer-group-name myconsumer123

Pour supprimer un consommateur donné du groupe de consommateurs, le formulaire suivant peut être utilisé:

XGROUP DELCONSUMER mystream consumer-group-name myconsumer123

Parfois, il peut être utile de supprimer les anciens consommateurs car ils ne sont plus utilisés. Ce formulaire renvoie le nombre de messages en attente dont dispose l'utilisateur avant d'être supprimé.

Enfin, vous pouvez utiliser des SETIDsous-commandes pour définir le prochain message à remettre. Habituellement, l'ID suivant est défini comme dernier paramètre lors de la création d'un utilisateur XGROUP CREATE. Cependant, vous pouvez modifier l'ID suivant ultérieurement à l'aide de ce formulaire sans avoir à supprimer et à créer à nouveau le groupe d'utilisateurs. Par exemple, si vous souhaitez que les consommateurs du groupe de consommateurs retraitent tous les messages du flux, vous pouvez définir leur ID suivant sur 0:

XGROUP SETID mystream consumer-group-name 0

GROUPE XREADGROUP

Utilisez XREADGROUP GROUP pour lire les messages dans le groupe de consommateurs, le format de syntaxe:

Consommateur du groupe XREADGROUP GROUP [COUNT count] [BLOCK millisecondes] [NOACK] STREAMS key [key ...] ID [ID ...]
  • group  : nom du groupe de consommateurs
  • consommateur  : nom du consommateur.
  • count  : le nombre de lectures.
  • millisecondes  : le nombre de millisecondes à bloquer.
  • key  : le nom de la file d'attente.
  • ID  : ID du message.
XREADGROUP GROUP nom du groupe de consommateurs nom du consommateur COUNT 1 STREAMS mystream>

 

Je suppose que tu aimes

Origine blog.csdn.net/weixin_40179091/article/details/114943752
conseillé
Classement