web-dev-qa-db-fra.com

L'événement sur clé expire

Je me demande s’il existe une fonctionnalité dans redis qui me permet d’obtenir toutes les clés expirées (je veux dire une sorte d’événement qui me donne l’occasion de reprendre tous les enregistrements expirés). L'objectif est de sauvegarder les anciennes valeurs dans une autre base de données. J'ai entendu dire qu'il est possible d'utiliser un mécanisme de publication, mais Google ne peut nous aider avec cette idée.

20
martoskin

La version de développement actuelle de redis contient une nouvelle fonctionnalité: les notifications d'espace clavier. Documentation: http://redis.io/topics/notifications

Les notifications Keyspace permettent aux clients de s'abonner aux canaux Pub/Sub afin de recevoir des événements affectant l'ensemble de données Redis.

Voici des exemples d'événements qu'il est possible de recevoir:

  • Toutes les commandes affectant une clé donnée.
  • Toutes les touches recevant une opération LPUSH.
  • Toutes les clés expirant dans la base de données 0.

Espérons que cela le rendra bientôt stable.

En passant, cela ne vous sera pas très utile pour vous aider à sauvegarder les valeurs des clés expirées. Lorsque l'événement d'expiration est déclenché, la valeur est déjà partie.

19
Sergio Tulentsev

L'événement expiré intégré généré par la notification de l'espace de clé n'est pas précis. Voir la dernière section de http://redis.io/topics/notifications

Les clés avec une durée de vie associée expirent par Redis de deux manières:

  1. Lorsque la commande est accessible par une commande et s’avère expirée. 

  2. Par l'intermédiaire d'un système d'arrière-plan qui recherche les clés expirées en arrière-plan, De manière incrémentielle, afin de pouvoir également collecter des clés qui n'ont jamais été accédées à .

Les événements expirés sont générés lors de l’accès à une clé et lorsque S’est avéré expiré par l’un des systèmes ci-dessus, il n’ya donc aucune garantie que Soit capable de générer le serveur Redis. événement expiré au moment où la durée de vie clé atteint la valeur de zéro. Si aucune commande ne cible constamment la clé et que plusieurs clés Sont associées à un TTL, il peut s'écouler un laps de temps important entre Et le moment où la clé passe à vivre passe à zéro et l'heure à laquelle l'événement expiré est généré.

Pour mettre pleinement en œuvre un événement d'expiration accumulée, vous devrez peut-être le mettre en œuvre vous-même. Par exemple, en utilisant une liste triée (ou une arborescence AVL) triée par date d'expiration et en lisant en permanence la queue de la liste (une file d'attente). Si le lecteur constate que le délai d'expiration n'a pas été atteint, il se met en veille (délai d'expiration - maintenant). De cette façon, la précision peut être contrôlée en 10 ms.

9
user3678130

Utilisez redis-scheduler
Vous pouvez le trouver ici

0
Mosayeb