Kortom - voor elk redis-object is er een vervaltijd. Tenzij u het object instelt om te verlopen, is die tijd "nooit".
Nu is het expiratiemechanisme zelf semi-lui. Luie vervaldatum betekent dat u de objecten niet daadwerkelijk laat verlopen totdat ze zijn gelezen. Bij het lezen van een object controleren we het tijdstempel van de vervaldatum, en als het in het verleden is, retourneren we niets en verwijderen we het object terwijl we toch bezig zijn. Maar het probleem is dat als een toets nooit wordt aangeraakt, deze zonder enige reden geheugen in beslag neemt.
Dus Redis voegt een tweede laag van willekeurige actieve expiratie toe. Het leest gewoon de hele tijd willekeurige sleutels en wanneer een verlopen sleutel wordt aangeraakt, wordt deze verwijderd op basis van het luie mechanisme. Dit heeft geen invloed op het verloop van het verlopen, het voegt alleen een "garbage collection" van verlopen sleutels toe.
Natuurlijk is de daadwerkelijke implementatie ingewikkelder dan dit, maar dit is het hoofdidee.
Je kunt er hier meer over lezen:http://redis.io/commands/expire
En de broncode voor de actieve vervalcyclus is hier te vinden:https://github.com/antirez/redis/blob/a92921da135e38eedd89138e15fe9fd1ffdd9b48/src/expire.c#L98