Durée de vie pour un membre du jeu
Est-il possible dans le Redis pour définir TTL (time to live), non pas une clé spécifique, mais pour un membre d'un ensemble?
Je suis en utilisant une structure de balises proposées par le Redis documentation - les données sont simples paires clé-valeur, et les balises sont des ensembles contenant les clés correspondant à chaque balise, par exemple
> SETEX id:id_1 100 'Lorem ipsum'
OK
> SADD tag:tag_1 id:id_1
(integer) 1
La clé id:id_1
à échéance comme prévu, mais je ne vois pas un moyen efficace de supprimer le membre correspondant de l' tag:tag_1
ensemble.
Une façon que j'ai trouvé est d'utiliser un cron job contenant un script qui permettrait d'éliminer l'expiration des clés à partir d'ensembles périodiquement par l'ajout de tous les noms de balise à l'autre, puis itérer sur toutes les balises, puis tous les id correspondant à chaque marque et de vérifier si la touche correspondante existe - si non, appelant SREM
.
Je ne pense pas que ce sera un moyen efficace et je voudrais éventuellement de garder les balises aussi propre que possible, parce que la taille des ensembles de va probablement affecter les performances de la recherche par plusieurs balises (SINTER
). Est-il plus "interne" de la sorte?
Vous devez vous connecter pour publier un commentaire.
Il n'est pas possible d'expiration des éléments dans la liste, des jeux ou des zsets.
Vous avez besoin pour mettre en œuvre un mécanisme de notification lorsque le maître de l'élément de l'expiration, de sorte que vous pouvez maintenir les ensembles correspondants en conséquence.
Voir la réponse à cette question, je pense que cela s'applique à votre cas d'utilisation (remplacer session, l'id utilisateur et par balise):
Redis, d'expiration de session, et de recherche inversée
Non, ce n'est pas possible (et pas prévu). Le recommandé approche consiste à utiliser un ensemble ordonné avec un score de définir à l'horodatage et ensuite de supprimer manuellement expiré clés. À la requête pour non-expiré touches, vous pouvez utiliser
ZRANGEBYSCORE $now +inf
, à supprimer expiré clés,ZREMRANGEBYSCORE -inf $now
fera l'affaire.Dans mon application, j'ai simplement question à la fois des commandes à chaque fois j'ai une requête à l'ensemble. J'ai aussi la combiner avec ce (long) temps d'expiration sur l'ensemble lui-même, éventuellement, d'en purger les éléments inutilisés ensembles.
Cet article promenades à travers cela plus en détail.
Vous pouvez pas de date d'expiration des éléments dans une liste directement, mais il est possible d'enregistrer un script lua dans votre redis serveur et ajouter cette fonctionnalité à redis.
Redis Expiration basée sur la valeur