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.serviceMax 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) |