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

Comment redis expire-t-il les clés ?

En bref - pour chaque objet redis, il y a un délai d'expiration. À moins que vous ne définissiez l'objet pour qu'il expire, ce délai est "jamais".

Maintenant, le mécanisme d'expiration lui-même est semi-paresseux. L'expiration différée signifie que vous n'expirez pas réellement les objets tant qu'ils ne sont pas lus. Lors de la lecture d'un objet, nous vérifions son horodatage d'expiration, et s'il est dans le passé, nous ne renvoyons rien et supprimons l'objet pendant que nous y sommes. Mais le problème est que si une touche n'est jamais touchée, elle prend de la mémoire sans raison.

Redis ajoute donc une deuxième couche d'expiration active aléatoire. Il lit simplement des clés aléatoires tout le temps, et lorsqu'une clé expirée est touchée, elle est supprimée en fonction du mécanisme paresseux. Cela n'affecte pas le comportement d'expiration, cela ajoute simplement une "récupération de la mémoire" des clés expirées.

Bien sûr, la mise en œuvre réelle est plus compliquée que cela, mais c'est l'idée principale.

Vous pouvez en savoir plus à ce sujet ici :http://redis.io/commands/expire

Et le code source du cycle d'expiration actif peut être trouvé ici :https://github.com/antirez/redis/blob/a92921da135e38eedd89138e15fe9fd1ffdd9b48/src/expire.c#L98