Wenn Sie die virtuelle Speicherfunktion aktiviert haben (BEARBEITEN:jetzt veraltet ), dann beginnt Redis, die "nicht so häufig verwendeten" Daten auf der Festplatte zu speichern, wenn der Speicher knapp wird.
Wenn der virtuelle Speicher in Redis deaktiviert ist (Standardeinstellung) und die Datei maxmemory
Parameter gesetzt ist (Standardeinstellung), verwendet Redis nicht mehr Speicher als maxmemory
erlaubt. Wenn Sie maxmemory
einschalten aus, beginnt Redis mit der Nutzung des virtuellen Speichers (d. h. Swap) und die Leistung wird enorm sinken.
Neuere Versionen von Redis haben verschiedene Richtlinien, wenn maxmemory
erreicht ist:
volatile-lru
- Entfernen Sie einen Schlüssel unter denen mit einem Ablaufsatz, indem Sie versuchen, kürzlich nicht verwendete Schlüssel zu entfernen.volatile-ttl
- Entfernen Sie einen Schlüssel unter denen mit einem Ablaufsatz, versuchen Sie, Schlüssel mit kurzer Restlebensdauer zu entfernen.volatile-random
- Entfernen Sie einen zufälligen Schlüssel unter denen mit einem Expire-Set.allkeys-lru
- wievolatile-lru
, entfernt aber jede Art von Schlüssel, sowohl normale Schlüssel als auch Schlüssel mit Ablaufdatum.allkeys-random
-wievolatile-random
, entfernt jedoch alle Arten von Schlüsseln, sowohl normale Schlüssel als auch Schlüssel mit Ablaufsatz.
Wenn Sie eine Richtlinie auswählen, die nur Schlüssel mit einem EXPIRE-Set entfernt, dann sieht es so aus, als ob das Programm die malloc()-Operation einfach abbricht, wenn Redis nicht mehr genügend Arbeitsspeicher zur Verfügung steht. Das heißt, wenn Sie versuchen, mehr Daten zu speichern, schlägt der Schreibvorgang einfach fehl.
Einige Links für weitere Informationen:
- http://antirez.com/post/redis-as-LRU-cache.html
- http://eli.thegreenplace.net/2009/10/30/handling-out-of-memory-conditions-in-c/