Redis - Max Memory & Key Eviction Policy

Vorwort

Damit Redis den maximalen physikalischen Arbeitsspeicher nicht überschreitet, stehen mehrere sogenannte Key Eviction Policies zur Verfügung, welche es ermöglichen, die gespeicherten Keys anhand der Policy definierten Kriterien automatisch zu entfernen, bis das Speicherlimit unterschritten wurde.


Voraussetzungen

  • Redis Server (mit Root-Zugriff)



Konfiguration anpassen

Verbinden Sie sich mit Ihrem Redis Server beispielsweise via SSH und loggen Sie sich als SSH Root-Benutzer ein.

Öffnen Sie die Redis Konfigurationsdatei mit einem Editor Ihrer Wahl, wir nutzen in diesem Fall nano :

nano /etc/redis/redis.conf 


Nach jeder Änderung muss der Redis Dienst neu gestartet werden:

systemctl restart redis-server.service



Max Memory

Die Max Memory Einstellung ermöglicht die Limitierung des von Redis verwendeten Arbeitsspeichers. Suchen Sie in der Konfigurationsdatei nach maxmemory und definieren Sie den gewünschten Wert.


maxmemory 4GB # setzt das Limit auf 4 GiB


Die folgende Tabelle zeigt die möglichen Größenordnungen der maximalen Speichergröße an:

Wert Definition
500MB 500 MiB
1GB 1 GiB
4GB 4 GiB
8GB 8 GiB
12GB 12 GiB
16GB 16 GiB


Die Suffixe mb, gb werden als Binärpräfixe(IEC-Präfixe) interpretiert. Mehr zu Speichergrößen →



Unterschied LRU & LFU

Was ist LRU (Least Recently Used)?

LRU ist ein Algorithmus zur Speicher- und Cache-Optimierung, der immer die Daten entfernt, die am längsten nicht mehr genutzt wurden. Das bedeutet: Wenn der Speicher voll ist, löscht das System zuerst die Einträge, die zuletzt am wenigsten „frisch" verwendet wurden.\nLRU eignet sich besonders gut für Anwendungen, bei denen aktuelle Daten deutlich wichtiger sind als ältere, da es das typische Nutzerverhalten realistisch abbildet.



Was ist LFU (Least Frequently Used)?

LFU ist ein Algorithmus zur effizienten Cache-Verwaltung, der die Einträge entfernt, die insgesamt am seltensten verwendet wurden. Statt auf die Zeit der letzten Nutzung zu achten, zählt LFU, wie oft auf einen Key zugegriffen wurde.\nLFU ist ideal, wenn häufig genutzte Daten im Cache bleiben sollen und selten genutzte Daten systematisch verdrängt werden.



Kurzvergleich LRU vs. LFU

  • LRU priorisiert Aktualität
  • LFU priorisiert Nutzungshäufigkeit


Beide Verfahren verbessern die Cache-Performance, verfolgen aber unterschiedliche Strategien zur Speicheroptimierung.



Max Memory Policy

Die Max Memory Policy-Einstellung definiert das Löschverhalten von Redis, wenn das Hinzufügen von Datensätzen zur Überschreitung des Max Memory Limits zur Folge hat.


Suchen Sie in der Konfigurationsdatei nach maxmemory-policy und setzten Sie die gewünschte Key Eviction Policy.

maxmemory-policy volatile-ttl # default setting


Key Eviction Policies

Die folgende Tabelle enthält eine Zusammenfassung aller von Redis unterstützten Key Eviction Policies und Ihrer Beschreibung.

Policy Beschreibung Berücksichtigung der Expire TTL
noeviction Keine Keys werden entfernt. Bei neuen Schreiboperationen wird ein Fehler ausgegeben, wenn kein Arbeitsspeicher mehr frei ist. ❌ Nein
allkeys-lru Entfernt die am wenigsten zuletzt verwendeten (LRU) Keys. ❌ Nein (betrifft alle Keys)
allkeys-lfu Entfernt die am seltensten verwendeten (LFU) Keys. ❌ Nein (betrifft alle Keys)
allkeys-random Entfernt zufällig ausgewählte Keys. ❌ Nein (betrifft alle Keys)
volatile-lru Entfernt LRU-Keys, aber nur solche mit gesetztem Ablaufdatum. ✔️ Ja (nur Keys mit Expire)
volatile-lfu Entfernt LFU-Keys, aber nur solche mit gesetztem Ablaufdatum. ✔️ Ja (nur Keys mit Expire)
volatile-random Entfernt zufällig Keys, aber nur solche mit gesetztem Ablaufdatum. ✔️ Ja (nur Keys mit Expire)
volatile-ttl Entfernt Keys mit Ablaufdatum, beginnend bei der kürzesten verbleibenden TTL. ✔️ Ja (nur Keys mit Expire)