Redis
Einrichten von Redis für Caching, Sitzungsspeicherung und horizontale Skalierung in LibreChat
Dieser Leitfaden beschreibt, wie Sie Redis für das Caching und die Sitzungsspeicherung in LibreChat konfigurieren. Redis bietet erhebliche Leistungsverbesserungen und ist für die horizontale Skalierung erforderlich – wenn Sie mehrere LibreChat-Instanzen hinter einem Load Balancer betreiben, stellt Redis einen konsistenten Status über alle Instanzen hinweg sicher.
Inhaltsverzeichnis
- Grundlegende Einrichtung
- Verbindungstypen
- Sicherheitskonfiguration
- Erweiterte Optionen
- Leistungsoptimierung
- Konfigurationsbeispiele
- Resumable Streams
Grundlegende Einrichtung
Redis aktivieren
Um Redis in LibreChat zu aktivieren, setzen Sie die folgende Umgebungsvariable in Ihrer .env Datei:
Wichtig: Wenn USE_REDIS=true gesetzt ist, müssen Sie auch eine REDIS_URI angeben. Die Anwendung wird einen Fehler ausgeben, wenn Redis ohne eine Verbindungs-URI aktiviert wird.
Verbindungstypen
Einzelne Redis-Instanz
Für eine standardmäßige Einzel-Redis-Server-Einrichtung:
Redis Cluster
Für Redis-Cluster-Bereitstellungen mit mehreren Knoten:
Die Anwendung erkennt den Cluster-Modus automatisch, wenn mehrere URIs bereitgestellt werden.
Wenn Ihr Redis-Cluster nur über einen einzigen URI verfügt, können Sie die Umgebungsvariable USE_REDIS_CLUSTER verwenden, um den Clustermodus zu aktivieren:
Managed Redis-Dienste mit einem einzelnen Endpoint
Einige verwaltete Redis-Dienste, einschließlich AWS ElastiCache Serverless und Redis Enterprise Cloud auf AWS, stellen einen einzelnen Verbindungs-endpoint bereit, während sie Schlüssel intern sharden. Behalten Sie in dieser Konfiguration LibreChat im Single-Node-Verbindungsmodus bei, aktivieren Sie jedoch cluster-sichere Löschvorgänge (cluster-safe deletes), falls Cache-Bereinigungen mit CROSSSLOT Keys in request don't hash to the same slot fehlschlagen.
REDIS_CLUSTER_SAFE_DELETE=true veranlasst LibreChat dazu, übereinstimmende Cache-Schlüssel einzeln zu löschen, anstatt Multi-Key-DEL-Befehle zu senden. Dies vermeidet CROSSSLOT-Fehler, ohne die Art und Weise zu ändern, wie LibreChat eine Verbindung zu Redis herstellt.
Verwenden Sie USE_REDIS_CLUSTER=true nur, wenn LibreChat einen Redis Cluster-Client erstellen soll. Für verwaltete Dienste mit einem einzelnen endpoint ist REDIS_CLUSTER_SAFE_DELETE=true die sicherere Option.
Redis mit TLS/SSL
Für sichere Redis-Verbindungen:
Sicherheitskonfiguration
Authentifizierung
Konfigurieren Sie die Redis-Authentifizierungsdaten:
Hinweis: Separate Benutzername/Passwort-Variablen überschreiben die Anmeldedaten in der URI, falls beide angegeben sind.
TLS-Konfiguration
Für verschlüsselte Verbindungen:
TLS mit Elasticache
Elasticache erfordert möglicherweise ein alternatives dnsLookup für TLS-Verbindungen. Siehe „Special Note: Aws Elasticache Clusters with TLS“ auf dieser Webseite: https://www.npmjs.com/package/ioredis
Erweiterte Optionen
Key Prefixing
Das Redis-Key-Prefixing verhindert eine Kontamination zwischen verschiedenen Deployments, indem Cache-Daten zwischen unterschiedlichen Umgebungen, Versionen oder Instanzen, die denselben Redis-Server nutzen, isoliert werden. Dies ist unerlässlich für:
- Multi-tenant-Bereitstellungen: Separate Staging-, Produktions- und Entwicklungsumgebungen
- Blue-green deployments: Isolierung des Caches zwischen verschiedenen Anwendungsversionen
Wichtig: Sie können nicht gleichzeitig REDIS_KEY_PREFIX_VAR und REDIS_KEY_PREFIX festlegen.
Beispiele für Kontamination ohne Präfix:
- Produktions-Cache durch Staging-Deployment überschrieben
- Tests von Feature-Branches beschädigen den Cache des Main-Branches
- Alte Deployment-Versionen, die veraltete zwischengespeicherte Daten bereitstellen
Format für Schlüsselpräfixe:
- IoRedis-Client:
{prefix}::{key} - Keyv-Client: Wird von der Store-Ebene verarbeitet
Verbindungslimits
Konfigurieren der Redis-Verbindungslimits:
Connection Keep-Alive
Konfigurieren Sie Redis-Ping-Intervalle, um Verbindungen aufrechtzuerhalten:
Wichtig:
- Das Setzen von
REDIS_PING_INTERVAL=0oder das Weglassen dieser Einstellung deaktiviert das Pingen vollständig. - Setzen Sie nur dann einen positiven Wert (in Sekunden), wenn bei Ihnen Probleme mit Verbindungszeitüberschreitungen auftreten.
- Das Intervall wird in Sekunden angegeben und gilt sowohl für IoRedis- als auch für Keyv Redis-Clients.
- Beispielwerte:
300(5 Minuten),600(10 Minuten),60(1 Minute)
Selektives In-Memory-Caching
Erzwingt die Verwendung von In-Memory-Speicher für bestimmte Cache-Namespaces, selbst wenn Redis aktiviert ist:
Gültige Cache-Schlüssel (aus dem CacheKeys Enum in librechat-data-provider):
| Schlüssel | Beschreibung |
|---|---|
CONFIG_STORE | Konfigurationsspeicher |
ROLES | Benutzerrollen |
PLUGINS | Plugin-Daten |
GEN_TITLE | Generierte Titel |
TOOLS | Tool-Daten |
MODELS_CONFIG | Modellkonfiguration |
MODEL_QUERIES | Modellabfragen |
STARTUP_CONFIG | Startkonfiguration |
ENDPOINT_CONFIG | endpoint-Konfiguration |
TOKEN_CONFIG | Token-Konfiguration |
APP_CONFIG | Anwendungskonfiguration |
ABORT_KEYS | Abbruch-Schlüssel |
BANS | Sperrdaten |
ENCODED_DOMAINS | Kodierte Domains |
AUDIO_RUNS | Audio-Verarbeitungsläufe |
MESSAGES | Nachrichten |
FLOWS | Flow-Daten |
PENDING_REQ | Ausstehende Anfragen |
S3_EXPIRY_INTERVAL | S3-Ablaufintervalle |
OPENID_EXCHANGED_TOKENS | OpenID-ausgetauschte Tokens |
OPENID_SESSION | OpenID-Sitzungen |
SAML_SESSION | SAML-Sitzungen |
Ungültige Schlüssel
Die Verwendung eines ungültigen Schlüssels (z. B. des veralteten STATIC_CONFIG) führt zu einem Startfehler. Verwenden Sie nur Schlüssel aus der obigen Tabelle.
Performance-Optimierung
Connection Keep-Alive
Die Anwendung implementiert ein konfigurierbares Connection Keep-Alive:
- Ping-Intervalle werden durch die Umgebungsvariable
REDIS_PING_INTERVALgesteuert. - Standardverhalten: Kein Pinging (empfohlen für die meisten Bereitstellungen)
- Wenn aktiviert, werden sowohl IoRedis- als auch Keyv-Redis-Clients in dem angegebenen Intervall angepingt.
- Löscht automatisch Ping-Intervalle bei Trennungs-/Schließungsereignissen
Cache-Strategie
Die Anwendung verwendet einen Dual-Client-Ansatz:
- IoRedis-Client: Primäre Redis-Operationen mit automatischem Präfix
- Keyv Redis-Client: Speicher-Layer-Operationen mit Präfix-Handhabung in
cacheFactory.js
Speicheroptimierung
Verwenden Sie FORCED_IN_MEMORY_CACHE_NAMESPACES, um die Leistung zu optimieren, indem häufig abgerufene, kleine Datensätze im Arbeitsspeicher gehalten werden, während Redis für größere Caches genutzt wird.
Konfigurationsbeispiele
Entwicklungseinrichtung
Produktions-Setup
Cluster-Einrichtung
Fortsetzbare Streams
Redis ermöglicht Resumable Streams für horizontal skalierte Deployments. Wenn diese Funktion aktiviert ist, können sich KI-Antworten nahtlos über Serverinstanzen hinweg neu verbinden und fortsetzen.
Wichtig: Wenn USE_REDIS=true gesetzt ist, verwenden fortsetzbare Streams automatisch Redis für die instanzübergreifende Koordination. Dies ist die empfohlene Einrichtung für horizontal skalierte Bereitstellungen, bei denen Benutzer möglicherweise eine Verbindung zu verschiedenen Serverinstanzen herstellen.
Hinweis: Wenn Sie eine einzelne LibreChat-Instanz betreiben, ist Redis für fortsetzbare Streams in der Regel übertrieben – der integrierte In-Memory-Modus funktioniert einwandfrei. Redis wird unerlässlich, wenn Sie mehrere LibreChat-Instanzen hinter einem Load Balancer haben, bei denen die Wiederverbindung eines Benutzers möglicherweise auf einen anderen Server trifft als den, auf dem der Stream gestartet wurde.
Konfiguration
Hauptvorteile (für horizontale Skalierung)
- Kontinuität über Instanzen hinweg: Benutzer können eine Generierung auf einem Server starten und auf einem anderen fortsetzen
- Rolling deployments: Aktive Streams überstehen Server-Neustarts
- Multi-tab-Synchronisierung: Dieselbe Konversation wird in einer Load-Balanced-Umgebung über mehrere Browser-Tabs hinweg synchronisiert
- Verbindungsstabilität: Automatische Wiederverbindung, unabhängig davon, welcher Server die Anfrage bearbeitet
Cluster-Konfiguration
Für Redis Cluster-Bereitstellungen verwendet LibreChat automatisch Hash-Tag-Schlüssel, um sicherzustellen, dass Stream-Operationen innerhalb desselben Cluster-Slots bleiben:
Weitere Details zu dieser Funktion finden Sie unter Resumable Streams.
Wie finden Sie diese Anleitung?