# 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.

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.


# 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 und used_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:

#!/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.

check_redis_cache.zip
check_redis_cache.zip 627B


# Cronjob einrichten

Um das Skript als Cronjob auszuführen, können Sie den unter Plesk "Aufgabenplanung" öffnen und eine neue Aufgabe hinzufügen: