Kurz gesagt – für jedes Redis-Objekt gibt es eine Ablaufzeit. Sofern Sie das Objekt nicht auf Ablauf setzen, ist diese Zeit "nie".
Nun ist der Ablaufmechanismus selbst halb faul. Lazy Expiration bedeutet, dass Sie die Objekte nicht tatsächlich verfallen lassen, bis sie gelesen werden. Beim Lesen eines Objekts überprüfen wir seinen Ablaufzeitstempel, und wenn es in der Vergangenheit liegt, geben wir nichts zurück und löschen das Objekt, wenn wir schon dabei sind. Aber das Problem ist, dass, wenn eine Taste nie berührt wird, sie einfach ohne Grund Speicherplatz belegt.
Redis fügt also eine zweite Schicht zufälliger aktiver Ablaufdaten hinzu. Es liest einfach die ganze Zeit zufällige Schlüssel, und wenn ein abgelaufener Schlüssel berührt wird, wird er basierend auf dem faulen Mechanismus gelöscht. Dies wirkt sich nicht auf das Ablaufverhalten aus, es fügt lediglich eine "Garbage-Collection" von abgelaufenen Schlüsseln hinzu.
Natürlich ist die eigentliche Implementierung komplizierter, aber das ist die Hauptidee.
Hier können Sie mehr darüber lesen:http://redis.io/commands/expire
Und den Quellcode für den aktiven Ablaufzyklus finden Sie hier:https://github.com/antirez/redis/blob/a92921da135e38eedd89138e15fe9fd1ffdd9b48/src/expire.c#L98