Kort sagt - för varje redis-objekt finns det en utgångstid. Om du inte ställer in objektet så att det löper ut är den tiden "aldrig".
Nu är själva utgångsmekanismen semi-lat. Lat utgång innebär att du faktiskt inte förfaller objekten förrän de är lästa. När vi läser ett objekt kontrollerar vi dess utgångstidsstämpel, och om det är i det förflutna returnerar vi ingenting och tar bort objektet medan vi håller på. Men problemet är att om en nyckel aldrig rörs, tar den bara upp minne utan anledning.
Så Redis lägger till ett andra lager av slumpmässigt aktivt utgångsdatum. Den läser bara slumpmässiga nycklar hela tiden, och när en utgången nyckel trycks på raderas den baserat på den lata mekanismen. Detta påverkar inte utgångsbeteendet, det lägger bara till "sopsamling" av utgångna nycklar.
Självklart är själva implementeringen mer komplicerad än så här, men detta är huvudtanken.
Du kan läsa mer om det här:http://redis.io/commands/expire
Och källkoden för den aktiva utgångscykeln finns här:https://github.com/antirez/redis/blob/a92921da135e38eedd89138e15fe9fd1ffdd9b48/src/expire.c#L98