Redis XTRIM

Redis Xtrim



Détails de bas niveau des flux Redis

Les flux Redis sont une structure de données d'ajout uniquement qui fournit un ensemble d'opérations de lecture et d'insertion très efficaces avec un mécanisme de stockage économe en mémoire. En interne, les flux Redis utilisent une structure de données arborescente Radix qui est une arborescence à espace optimisé avec une efficacité de mémoire élevée.

Les flux Redis stockent les données sous la forme d'une liste d'entrées où chaque entrée est constituée de paires clé-valeur. À un niveau inférieur, ces entrées sont regroupées dans des macro-nœuds, comme illustré ci-dessous.









Dans cet article, nous nous concentrons sur la suppression des entrées de flux à l'aide de la commande XTRIM, et le concept mentionné ci-dessus affecte étroitement l'efficacité de l'opération de suppression. Habituellement, la suppression d'entrée de flux Redis est très efficace si elle est effectuée au niveau du macro-nœud mais pas au niveau d'entrée. Ce mécanisme est implémenté avec la commande XTRIM dont nous parlerons dans la section suivante.



La commande XTRIM

La commande XTRIM permet de couper les entrées d'un flux en fonction d'une valeur seuil donnée. Le seuil peut être un nombre maximal d'entrées par flux ou un ancien ID d'entrée. La commande XTRIM accepte le type de seuil comme argument de commande. La syntaxe de la commande XTRIM est la suivante.





XTRIM stream_key MAXLEN | MINID [ = | ~ ] valeur de seuil [ LIMITER le nombre ]

stream_key : La clé du flux Redis.

MAXLEN : La longueur maximale du flux après la suppression des entrées. Toutes les entrées dépassant la longueur du flux spécifiée par la valeur seuil seront supprimées. Cet argument est un entier positif.

MINID  : L'ID de flux minimal qui doit rester après la suppression des entrées. Toutes les entrées dont les ID sont inférieurs au seuil spécifié seront supprimées. Chaque fois que vous spécifiez ce paramètre, le seuil devient un ID de flux.

= opérateur : Lorsqu'il est spécifié, le rognage exact sera effectué en fonction de la valeur de seuil.

~ opérateur  : Lorsque spécifié, un ajustement presque exact sera effectué en fonction de la valeur de seuil et de la taille du macro-nœud.

valeur de seuil : valeur de seuil basée sur l'argument MAXLEN ou MINID.

LIMITER le nombre : Le nombre maximum d'entrées à supprimer.

Cas d'utilisation 01 - Suppression d'entrées de flux en fonction de la longueur maximale

Supposons qu'une entreprise de tourisme gère un magasin Redis pour suivre les informations touristiques. La structure de données des flux Redis a été utilisée pour stocker les informations de chaque touriste sous forme de paires clé-valeur. Avec le temps, le flux a augmenté et ils prévoient de ne conserver que les 1000 dernières entrées. Ils ont donc identifié que la longueur maximale du flux devrait être de 1000 à tout moment. La commande XTRIM a été utilisée pour y parvenir.

À des fins de démonstration, nous allons d'abord créer un flux avec 10 entrées comme suit. La commande XADD a été utilisée pour effectuer l'insertion.

xadd infos touristiques * nom jack pays italie familymems 5
xadd infos touristiques * nom harry pays usa familymems deux
xadd infos touristiques * nom nikomita pays japon familymems 3
xadd infos touristiques * nom zakaria pays inde familymems deux
xadd infos touristiques * nom redmond pays brésil familymems 6
xadd infos touristiques * nom trouvé pays japon familymems 3
xadd infos touristiques * nom maryjohn pays usa familymems deux
xadd infos touristiques * nom liza pays italie familymems 5
xadd infos touristiques * nom nimshikaa pays japon familymems 3
xadd infos touristiques * nom nisha pays italie familymems 5

Utilisons la commande XRANGE pour inspecter le flux touristinfo comme suit.

xrange infos touristiques - +

Production:

Comme prévu, les 10 entrées de flux ont été affichées par cette commande.

À des fins de démonstration, nous allons couper le flux là où sa longueur maximale serait de 5.

xtrim infos touristiques maxlen 5

Inspectons à nouveau les entrées de flux avec la commande XRANGE.

Comme prévu, cinq entrées ont été expulsées du flux, et sa longueur est de 5.

Cas d'utilisation 02 - Suppression des entrées de flux en fonction des ID de flux

Prenons un exemple où une société météorologique suit les informations météorologiques d'un emplacement donné à l'aide de flux Redis. Maintenant, ils veulent supprimer les anciennes entrées qui ne sont plus nécessaires. Nous pouvons utiliser la commande XTRIM en utilisant la stratégie MINID, comme indiqué ci-dessous.

Tout d'abord, nous allons créer un flux appelé weatherinfo et y ajouter 5 entrées comme suit.

xajouter des infos météo * temp dix humidité cinquante
xajouter des infos météo * temp vingt humidité 70
xajouter des infos météo * temp 12 humidité 65
xajouter des infos météo * temp quinze humidité 88
xajouter des infos météo * temp 18 humidité Quatre cinq

Production:

Utilisons la commande XTRIM pour supprimer les entrées dont les ID sont inférieurs à la valeur de seuil spécifiée.

xtrim info météo MINID 1660485503248 - 0

L'identifiant minimum spécifié est associé à la troisième entrée. Par conséquent, les entrées après la troisième entrée qui ont des identifiants inférieurs seront supprimées.

Production:

Comme nous n'avons pas spécifié explicitement les arguments = ou ~, la commande utilise l'opérateur = par défaut. Par conséquent, le découpage exact a été effectué dans les deux cas d'utilisation. Si vous avez spécifié explicitement l'opérateur ~, un découpage presque exact sera effectué, comme illustré ci-dessous.

Comme le montre la figure ci-dessus, la commande XTRIM a été utilisée avec l'opérateur ~. Nous demandons à la commande de supprimer toutes les entrées qui dépassent la longueur de 100. Puisque nous ne forçons pas la commande XTRIM à effectuer un découpage exact, elle se concentrera sur l'efficacité de l'opération de découpage. Ainsi, il ne supprimera pas les entrées immédiates qui appartiennent au même macro-nœud. Il conservera les trois entrées suivantes qui se trouvent dans le même macro-nœud et supprimera tous les macro-nœuds après ceux-ci. Cela améliore considérablement les performances par rapport à l'approche de découpage exact, ce qui oblige la commande à fournir un effort supplémentaire. La même procédure a lieu lorsque le seuil est basé sur les ID d'entrée.

L'argument LIMIT limite le nombre d'entrées évincées du flux spécifié, ce qui peut être utilisé pour améliorer un peu plus les performances.

Conclusion

En bref, la commande XTRIM est utilisée pour supprimer les entrées de flux en fonction d'une valeur de seuil. Le type de la valeur de seuil peut être modifié avec le contexte spécifié à l'aide des arguments de commande MAXLEN et MINID. Comme discuté, l'ajustement peut être effectué de deux manières où l'opération d'ajustement considérera le seuil comme une limite exacte ou approximative. Par défaut, la commande utilise l'opérateur = qui est utilisé pour un découpage exact. Avec l'opérateur ~, vous pouvez faire un découpage approximatif comme mentionné dans la section ci-dessus. Dans l'ensemble, l'approche de découpage approximatif et l'argument LIMIT vous aident à gagner un gain de performances considérable avec la commande XTRIM.