Jeśli masz włączoną funkcję pamięci wirtualnej (EDYTUJ:teraz przestarzałe ), a następnie Redis zaczyna przechowywać „niezbyt często używane” dane na dysku, gdy wyczerpie się pamięć.
Jeśli pamięć wirtualna w Redis jest wyłączona (domyślnie), a maxmemory
parametr jest ustawiony (domyślnie), Redis nie użyje więcej pamięci niż maxmemory
pozwala. Jeśli zmienisz maxmemory
wyłączone, Redis zacznie używać pamięci wirtualnej (tj. wymiany), a wydajność ogromnie spadnie.
Nowsze wersje Redis mają różne zasady, gdy maxmemory
został osiągnięty:
volatile-lru
- usuń klucz spośród tych z ustawionym terminem ważności, próbując usunąć klucze, które nie były ostatnio używane.volatile-ttl
- usuń klucz spośród tych z ustawionym terminem ważności, próbując usunąć klucze z krótkim pozostałym czasem życia.volatile-random
- usuń klucz losowy spośród tych z ustawionym terminem ważności.allkeys-lru
- jakvolatile-lru
, ale usunie każdy rodzaj klucza, zarówno normalne klucze, jak i klucze z ustawionym terminem ważności.allkeys-random
-jakvolatile-random
, ale usunie każdy rodzaj kluczy, zarówno normalne klucze, jak i klucze z ustawionym terminem ważności.
Jeśli wybierzesz zasadę, która usuwa tylko klucze z zestawem EXPIRE, to gdy Redis zabraknie pamięci, wygląda na to, że program po prostu przerywa operację malloc(). Oznacza to, że jeśli spróbujesz zapisać więcej danych, operacja zapisu po prostu się nie powiedzie.
Kilka linków, aby uzyskać więcej informacji:
- http://antirez.com/post/redis-as-LRU-cache.html
- http://eli.thegreenplace.net/2009/10/30/handling-out-of-memory-conditions-in-c/