#
Redis Cache
Aktuell ist in unserem System die Redis Verdrängungsstrategie volatile-lru
eingestellt.
Wir haben Vorkehrungen getroffen, um sicherzustellen, dass Ihr Server nicht zu viel Speicher verbraucht. Daher empfehlen wir dringend, die Redis Instanz kontinuierlich zu überwachen, um sicherzustellen, dass sie nicht das eingestellte Limit von 256MB
erreicht.
Je nach Konfiguration, kann das Limit auch abweichen.
Wenn der Redis-Instanzspeicher voll ist und ein neuer Schreibvorgang eingeht, werden die Schlüssel von Redis entfernt, um Platz für den Schreibvorgang zu schaffen. Dieser Vorgang basiert auf der Maximalspeicherrichtlinie Ihrer Instanz. Die standardmäßige Richtlinie für maxmemory-policy
für Redis ist volatile-lfu
.
-
noeviction
: Gibt einen Fehler zurück, wenn die Redis-Instanz den Höchstspeicher (
maxmemory
) erreicht. Daten werden nicht überschrieben oder entfernt. - allkeys-lfu : Verfügbar in Redis-Version 4.0 oder höher. Entfernt die am wenigsten verwendeten Schlüssel aus dem gesamten Keyset.
- allkeys-lru : Entfernt die am weitesten in der Vergangenheit verwendeten (LRU) Schlüssel aus dem gesamten Keyset.
- volatile-lfu : Verfügbar in Redis Version 4.0 oder höher. Löscht die am weitesten in der Vergangenheit verwendeten Schlüssel, die mit TTL-Ablauf (Lebensdauer) festgelegt sind.
- volatile-lru : Entfernt die am weitesten in der Vergangenheit verwendeten (LRU)-Schlüssel, die mit TTL-Ablaufzeiten festgelegt sind.
- allkeys-random : Entfernt zufällige Schlüssel aus dem gesamten Schlüsselbereich.
- volatile-random : Entfernt zufällige Schlüssel aus den Schlüsseln mit TTL-Ablauf.
- volatile-ttl : Entfernt die Schlüssel mit der kürzesten TTL aus den Schlüsseln mit TTL-Ablauf.
#
Redis-CLI
Um Ihre Redis-Datenbank zu überwachen, bietet sich das SSH-Tool redis-cli
an. Mit diesem Tool können Sie sich wichtige Informationen über Ihre Datenbank anzeigen lassen.
#
Datenbankinformationen
Der folgende Code gibt alle Informationen über Ihre Datenbank aus:
redis-cli -s /private/redis.sock info
Dieser Befehl verbindet sich über die sock-Datei /private/redis.sock
mit Ihrer Redis-Instanz und gibt dann eine Reihe von Informationen über den Status und die Performance Ihrer Datenbank aus. Diese Informationen sind äußerst wertvoll, um mögliche Probleme zu erkennen und geeignete Maßnahmen zu ergreifen.
Bitte beachten Sie, dass Sie den Pfad zur sock-Datei entsprechend Ihrer Konfiguration möglicherweise anpassen müssen.
#
Live Überwachung
Möchten Sie Ihre Datenbank live überwachen, bietet sich der Folgende Code an:
redis-cli -s /private/redis.sock --stat
Hier wird Ihnen jede Sekunde der Zustand der Datenbank angezeigt. Zum Beispiel: Wie viele Requests fanden in den letzten Sekunden statt oder wie viel Arbeitsspeicher belegt die Redis-Datenbank zurzeit.
#
Speicherverbrauch ermitteln
Um den aktuellen Arbeitsspeicherverbrauch Ihrer Redis-Datenbank zu ermitteln, können Sie den folgenden Befehl ausführen:
redis-cli -s /private/redis.sock info memory
Der info memory
Befehl in Redis ist ein äußerst nützliches Werkzeug zur Überwachung und Verwaltung des Speichers in Ihrer Redis-Datenbank.
Wenn Sie redis-cli -s /private/redis.sock info memory
ausführen, liefert Redis eine Reihe von Informationen speziell zum Speicherverbrauch der Datenbank. Hier sind einige der wichtigsten Ausgaben, die Sie erwarten können:
- used_memory : Die Gesamtmenge an Speicher in Bytes, die von Redis zugewiesen wurde.
- used_memory_human : Eine für Menschen lesbare Darstellung des Speicherverbrauchs.
- used_memory_rss : Die Menge an Speicher, die vom Betriebssystem an Redis zugewiesen wurde, einschließlich aller Fragmente.
- used_memory_peak : Der höchste Speicherverbrauch, den Redis bisher erreicht hat.
- used_memory_peak_human : Eine für Menschen lesbare Darstellung des Spitzen-Speicherverbrauchs.
- used_memory_lua : Die Menge an Speicher, die vom Lua-Interpreter belegt wird.
-
mem_fragmentation_ratio
: Das Verhältnis zwischen
used_memory_rss
undused_memory
. - mem_allocator : Der verwendete Speicherzuweiser.
Diese Informationen können Ihnen dabei helfen, den Speicherverbrauch Ihrer Datenbank zu überwachen und bei Bedarf Anpassungen vorzunehmen. Sie können zum Beispiel sehen, ob Ihre Datenbank Speicherprobleme hat, oder ob Sie Ihre Speicherverwaltung optimieren müssen.
Falls Sie nur den Arbeitsspeicherverbrauch direkt ausgeben möchten, können Sie das mit dem folgenden Befehl:
redis-cli -s /private/redis.sock info memory | grep "used_memory:" | cut -d ":" -f2 | tr -cd '[:digit:]'
#
Cache löschen
Das Löschen des Redis-Caches ist ein einfacher Prozess. Sie können alle Daten aus Ihrer Datenbank löschen, indem Sie den Befehl flushdb
verwenden, oder Sie können alle Daten aus allen Datenbanken löschen, indem Sie den Befehl flushall
verwenden.
#
Flushdb
Um alle Schlüssel der aktuellen Datenbank zu löschen, können Sie den Befehl flushdb
verwenden.
redis-cli -s /private/redis.sock -n [DB] flushdb
#
Flushall
Um alle Schlüssel aus allen Datenbanken zu löschen, können Sie den Befehl flushall
verwenden.
redis-cli -s /private/redis.sock flushall
#
Bash Script zum Bereinigen der Datenbank
Wenn wir alles miteinander kombinieren, können wir uns auch ein eigenes Bash-Script zusammenstellen, dass per Cronjob einzelne Datenbanken in der Redis-Instanz überwacht und automatisch den Befehl flushdb
ausführt:
Bitte beachten Sie, dass Sie den Pfad zur sock-Datei sowie den Schwellenwert für den Speicherverbrauch entsprechend Ihren Bedürfnissen anpassen müssen.
Wichtig: Der Befehl flushdb löscht alle Schlüssel der ausgewählten Datenbank.
#!/bin/bash
# Konfiguration
REDIS_SOCKET="/private/redis.sock" # Socket Datei
DB="1" # Datenbank die gelöscht werden soll. In unserem Beispiel wäre das die Datenbank für den Model-Cache
MAX_CACHE_SIZE="100000000" # Maximale Cache-Größe in Bytes (100 Mb)
# Redis Info-Befehl ausführen, um die aktuelle Cache-Größe abzurufen
CACHE_SIZE=$(redis-cli -s $REDIS_SOCKET info memory | grep "used_memory:" | cut -d ":" -f2 | tr -cd '[:digit:]')
# Überprüfen, ob die Cache-Größe das Maximum überschritten hat
if [ "$CACHE_SIZE" -gt "$MAX_CACHE_SIZE" ]; then
echo "Cache-Größe ($CACHE_SIZE) überschreitet Maximum ($MAX_CACHE_SIZE) - Leere Cache..."
# Redis Cache leeren
redis-cli -h $REDIS_HOST -n $DB flushdb
echo "Cache geleert."
else
echo "Cache-Größe ($CACHE_SIZE) unter Maximum ($MAX_CACHE_SIZE). Keine Aktion erforderlich."
fi
Sie können sich hier das fertige Bashscript als zip
herunter laden.
#
Cronjob einrichten
Um das Skript als Cronjob auszuführen, können Sie den unter Plesk "Aufgabenplanung" öffnen und eine neue Aufgabe hinzufügen: