Redis: possible d'expirer un élément d'un tableau ou d'un ensemble trié?

124

Est-il actuellement possible d'expirer uniquement une paire clé / valeur entière? Que faire si je veux ajouter des valeurs à une structure de type Liste et les faire supprimer automatiquement 1 heure après l'insertion. Est-ce actuellement possible, ou faudrait-il exécuter une tâche cron pour effectuer la purge manuellement?

randombits
la source

Réponses:

76

Est-il actuellement possible d'expirer uniquement une paire clé / valeur entière?

Pour autant que je sache, et également selon les commandes clés et le document sur l' expiration , vous pouvez actuellement définir l'expiration uniquement sur une clé spécifique et non sur sa structure de données sous-jacente. Cependant, il y a une discussion sur les groupes Google sur cette fonctionnalité avec des solutions alternatives décrites.

yojimbo87
la source
1
Une idée à partir de maintenant juillet 2016, ils ont soutenu cela dans leur nouvelle version?
Kamran Shahid
1
@KamranShahid a quelque chose à ce sujet ??
Prakash Kumar
1
Nop Prakash pas encore.
Kamran Shahid
3
Cette réponse est-elle toujours d'actualité après 8 ans?
simo
2
Oui, l'expiration des éléments dans les structures de données imbriquées n'est pas prise en charge par Redis.
Itamar Haber
94

Il existe un modèle commun qui résout assez bien ce problème.

Utilisez des ensembles triés et utilisez un horodatage comme score. Il est alors trivial de supprimer des éléments par plage de scores, ce qui pourrait être fait périodiquement, ou uniquement à chaque écriture, les lectures ignorant toujours les éléments hors plage, en ne lisant qu'une plage de scores.

Plus d'informations ici: https://groups.google.com/forum/#!topic/redis-db/rXXMCLNkNSs

Adriaan Pelzer
la source
7
Belle solution, mais je souhaite que Redis le supporte correctement. C'est une exigence courante et ne devrait pas nécessiter de solutions de contournement complexes.
UpTheCreek
14
Je ne sais pas, je suis vraiment heureux qu'ils s'en tiennent à leurs armes - étendre l'ensemble des fonctionnalités d'une manière qu'ils ne veulent pas ou ne planifie pas signifie faire des sacrifices de conception. Construire des fonctionnalités supplémentaires sur le dessus semble être la solution parfaite, et laisse Redis faire ce qu'il fait, excellemment
Kieren Johnstone
redis est parfait tel quel - conception simple et propre et comportement prévisible qui se traduit par une excellente performance
let4be
1
Merveilleuse solution, nous avons également pu utiliser une simple liste fifo où nous gardions une liste et prenions simplement les 5 premiers éléments, et lorsque la liste est devenue plus grande que 5 + N en fonction de l'évolutivité, nous supprimons la clé et recommençons. Simple, facile et exactement comme les algorithmes Redis devraient être. Cet algorithme donne à notre système de rapports suffisamment de temps pour interroger la liste et voir avec quels appareils les utilisateurs se connectent. D'accord avec @KierenJohnstone, Redis est conçu pour créer une architecture autour de lui et est parfait comme il est.
Ligemer
1

Je suis tombé sur une méthode différente pour gérer cela, je ne sais pas si cela vous est utile, mais voici:

Le hachage et l'ensemble trié sont liés par un guid.

  1. J'ai un hachage qui expire dans «x» secondes
  2. J'ai un ensemble trié utilisé pour les requêtes à distance
  3. Les données pour les deux sont ajoutées dans une transaction, donc si l'une échoue, elles échouent toutes les deux.
  4. Sur une requête à distance, utilisez 'EXISTS' pour voir si la valeur hachée existe lorsque les résultats sont itérés sur
  5. S'il n'existe pas, il a expiré, supprimez donc l'élément de l'ensemble trié
JEPrice
la source