W skrócie - dla każdego obiektu redis istnieje czas wygaśnięcia. O ile nie ustawisz wygaśnięcia obiektu, ten czas to „nigdy”.
Teraz sam mechanizm wygaśnięcia jest na wpół leniwy. Opóźnione wygaśnięcie oznacza, że nie wygasasz obiektów, dopóki nie zostaną odczytane. Czytając obiekt, sprawdzamy jego datę wygaśnięcia, a jeśli to już przeszłość, nic nie zwracamy i usuwamy obiekt, gdy już przy nim jesteśmy. Ale problem polega na tym, że jeśli klawisz nigdy nie zostanie dotknięty, po prostu zabiera pamięć bez powodu.
Dlatego Redis dodaje drugą warstwę losowego aktywnego wygaśnięcia. Po prostu odczytuje losowe klucze przez cały czas, a po dotknięciu wygasłego klucza jest usuwany w oparciu o leniwy mechanizm. Nie ma to wpływu na zachowanie wygaśnięcia, po prostu dodaje „zbieranie śmieci” wygasłych kluczy.
Oczywiście sama implementacja jest bardziej skomplikowana, ale to jest główna idea.
Więcej na ten temat możesz przeczytać tutaj:http://redis.io/commands/expire
A kod źródłowy aktywnego cyklu wygaśnięcia można znaleźć tutaj:https://github.com/antirez/redis/blob/a92921da135e38eedd89138e15fe9fd1ffdd9b48/src/expire.c#L98