Stručně řečeno - pro každý objekt redis je uvedena doba expirace. Pokud nenastavíte objekt tak, aby vypršela doba platnosti, je tento čas „nikdy“.
Nyní je samotný mechanismus expirace pololíný. Lazy expiration znamená, že ve skutečnosti nevyprší platnost objektů, dokud nejsou přečteny. Při čtení objektu kontrolujeme jeho časové razítko vypršení platnosti, a pokud je v minulosti, nic nevracíme a objekt smažeme, když jsme u něj. Problém je ale v tom, že pokud se klávesy nikdy nedotknete, bezdůvodně zabírá paměť.
Redis tedy přidává druhou vrstvu náhodného aktivního vypršení. Jen neustále čte náhodné klíče, a když se dotknete klíče s prošlou platností, je smazán na základě líného mechanismu. Toto neovlivňuje chování vypršení platnosti, pouze přidává „sběr odpadu“ prošlých klíčů.
Skutečná implementace je samozřejmě složitější, ale toto je hlavní myšlenka.
Více si o tom můžete přečíst zde:http://redis.io/commands/expire
A zdrojový kód pro cyklus aktivní expirace naleznete zde:https://github.com/antirez/redis/blob/a92921da135e38eedd89138e15fe9fd1ffdd9b48/src/expire.c#L98