Redis
 sql >> Base de données >  >> NoSQL >> Redis

Comment définir le TTL pour les flux Redis ?

Il n'y a pas de moyen simple de supprimer les anciennes entrées en fonction de la durée de vie/de l'âge. Vous pouvez utiliser une combinaison de XTRIM/XDEL avec d'autres commandes pour couper le flux.

Voyons comment nous pouvons utiliser XTRIM

Flux XTRIM MAXLEN ~ SIZE

XTRIM limite le flux à un nombre donné d'éléments, supprimant les éléments plus anciens (éléments avec des ID inférieurs) si nécessaire.

Vous générez la taille du flux tous les jours ou périodiquement en fonction de votre politique de suppression et la stockez quelque part à l'aide de XLEN commande

Exécuter une tâche périodique qui appellerait XTRIM en tant que

XTRIM x-stream MAXLEN ~ (NEW_SIZE - PREVIOUS_SIZE)

Par exemple, hier, la taille du flux était de 500, maintenant elle est de 600, nous devons supprimer 500 entrées pour pouvoir simplement exécuter

XTRIM x-stream MAXLEN ~ 100

Vous pouvez utiliser différentes politiques de suppression, par exemple quotidiennement, hebdomadairement, deux fois par semaine, etc.

ID de flux XDEL [ID...]

Supprime les entrées spécifiées d'un flux et renvoie le nombre d'entrées supprimées, qui peut être différent du nombre d'ID passés à la commande au cas où certains ID n'existent pas.

Donc, ce que vous pouvez faire, c'est que chaque fois que le service B consomme l'événement, le service lui-même peut supprimer l'entrée de flux car le service B connaît l'ID de flux, mais cela ne fonctionnera pas dès que vous commencerez à utiliser le groupe de consommateurs. Je dirais donc d'utiliser Redis set ou Redis map pour suivre les identifiants de flux de reconnaissance et exécuter une tâche de balayage périodique pour nettoyer le flux.

Par exemple

Le service A envoie un élément de flux avec ID1 au service BService B reconnaît l'élément de flux après avoir consommé les éléments dans le mappack_stream ={ ID1:true }, vous pouvez suivre d'autres données, par ex. compter dans le cas du groupe de consommateurs.

Un travail de balayage s'exécuterait périodiquement comme 1 h du matin tous les jours qui lit tous les éléments de ack_stream et filtre tous les éléments qui nécessitent une suppression. Vous pouvez maintenant appeler XDEL commandes par lots avec l'ensemble des identifiants de flux.