Redis
Configuration de Redis pour la mise en cache, le stockage de session et la mise à l'échelle horizontale dans LibreChat
Ce guide explique comment configurer Redis pour la mise en cache et le stockage de session dans LibreChat. Redis offre des améliorations de performances significatives et est requis pour le déploiement horizontal — si vous exécutez plusieurs instances de LibreChat derrière un équilibreur de charge, Redis garantit un état cohérent sur toutes les instances.
Table des matières
- Configuration de base
- Types de connexion
- Configuration de sécurité
- Options avancées
- Optimisation des performances
- Exemples de configuration
- Flux reprenables
Configuration de base
Activer Redis
Pour activer Redis dans LibreChat, définissez la variable d'environnement suivante dans votre fichier .env :
Important : Lorsque USE_REDIS=true, vous devez également fournir une REDIS_URI. L'application générera une erreur si Redis est activé sans URI de connexion.
Types de connexion
Instance Redis unique
Pour une configuration standard avec un seul serveur Redis :
Cluster Redis
Pour les déploiements de cluster Redis avec plusieurs nœuds :
L'application détecte automatiquement le mode cluster lorsque plusieurs URI sont fournis.
Si votre cluster Redis ne possède qu'une seule URI, vous pouvez utiliser la variable d'environnement USE_REDIS_CLUSTER pour activer le mode cluster :
Services Redis gérés à point de terminaison unique
Certains services Redis gérés, notamment AWS ElastiCache Serverless et Redis Enterprise Cloud sur AWS, exposent un seul endpoint de connexion tout en fragmentant les clés en interne. Dans cette configuration, maintenez LibreChat en mode de connexion à nœud unique, mais activez les suppressions sécurisées pour le cluster (cluster-safe deletes) si les effacements de cache échouent avec l'erreur CROSSSLOT Keys in request don't hash to the same slot.
REDIS_CLUSTER_SAFE_DELETE=true permet à LibreChat de supprimer les clés de cache correspondantes une par une au lieu d'envoyer des commandes DEL multi-clés. Cela évite les erreurs CROSSSLOT sans modifier la manière dont LibreChat se connecte à Redis.
Utilisez USE_REDIS_CLUSTER=true uniquement lorsque LibreChat doit créer un client Redis Cluster. Pour les services gérés à point de terminaison unique, REDIS_CLUSTER_SAFE_DELETE=true est l'option la plus sûre.
Redis avec TLS/SSL
Pour des connexions Redis sécurisées :
Configuration de la sécurité
Authentification
Configurez les identifiants d'authentification Redis :
Note : Les variables de nom d'utilisateur/mot de passe distinctes remplacent les identifiants dans l'URI si les deux sont fournis.
Configuration TLS
Pour les connexions chiffrées :
TLS avec Elasticache
Elasticache peut nécessiter l'utilisation d'un dnsLookup alternatif pour les connexions TLS. Voir « Special Note: Aws Elasticache Clusters with TLS » sur cette page web : https://www.npmjs.com/package/ioredis
Options avancées
Préfixage de clé
Le préfixage des clés Redis empêche la contamination entre les déploiements en isolant les données de cache entre différents environnements, versions ou instances partageant le même serveur Redis. Ceci est essentiel pour :
- Déploiements multi-locataires : environnements de staging, de production et de développement distincts
- Blue-green deployments : Isoler le cache entre différentes versions de l'application
Important : Vous ne pouvez pas définir REDIS_KEY_PREFIX_VAR et REDIS_KEY_PREFIX simultanément.
Exemples de contamination sans préfixe :
- Le cache de production a été écrasé par le déploiement de staging
- Les tests de branches de fonctionnalités corrompent le cache de la branche principale
- Anciennes versions de déploiement fournissant des données en cache obsolètes
Format de préfixe de clé :
- Client IoRedis :
{prefix}::{key} - Client Keyv : Géré par la couche de stockage
Limites de connexion
Configurer les limites de connexion Redis :
Connection Keep-Alive
Configurez les intervalles de ping Redis pour maintenir les connexions :
Important :
- Définir
REDIS_PING_INTERVAL=0ou l'omettre désactive complètement le ping. - Ne définissez une valeur positive (en secondes) que si vous rencontrez des problèmes de délai d'attente de connexion.
- L'intervalle est spécifié en secondes et s'applique aux clients IoRedis et Keyv Redis.
- Valeurs d'exemple :
300(5 minutes),600(10 minutes),60(1 minute)
Mise en cache sélective en mémoire
Forcer l'utilisation du stockage en mémoire pour des espaces de noms de cache spécifiques, même lorsque Redis est activé :
Clés de cache valides (issues de l'énumération CacheKeys dans librechat-data-provider) :
| Clé | Description |
|---|---|
CONFIG_STORE | Magasin de configuration |
ROLES | Rôles utilisateur |
PLUGINS | Données des plugins |
GEN_TITLE | Titres générés |
TOOLS | Données des outils |
MODELS_CONFIG | Configuration des modèles |
MODEL_QUERIES | Requêtes de modèle |
STARTUP_CONFIG | Configuration de démarrage |
ENDPOINT_CONFIG | Configuration d'endpoint |
TOKEN_CONFIG | Configuration des jetons |
APP_CONFIG | Configuration de l'application |
ABORT_KEYS | Clés d'interruption |
BANS | Données de bannissement |
ENCODED_DOMAINS | Domaines encodés |
AUDIO_RUNS | Exécutions de traitement audio |
MESSAGES | Messages |
FLOWS | Données des flux |
PENDING_REQ | Requêtes en attente |
S3_EXPIRY_INTERVAL | Intervalles d'expiration S3 |
OPENID_EXCHANGED_TOKENS | Jetons échangés OpenID |
OPENID_SESSION | Sessions OpenID |
SAML_SESSION | Sessions SAML |
Clés invalides
L'utilisation d'une clé invalide (par exemple, la clé obsolète STATIC_CONFIG) provoquera une erreur au démarrage. Utilisez uniquement les clés du tableau ci-dessus.
Optimisation des performances
Connection Keep-Alive
L'application implémente une connexion keep-alive configurable :
- Les intervalles de ping sont contrôlés par la variable d'environnement
REDIS_PING_INTERVAL - Comportement par défaut : Aucun ping (recommandé pour la plupart des déploiements)
- Lorsqu'il est activé, envoie des pings aux clients IoRedis et Keyv Redis à l'intervalle spécifié.
- Efface automatiquement les intervalles de ping lors des événements de déconnexion/fermeture
Stratégie de cache
L'application utilise une approche à double client :
- Client IoRedis : Opérations Redis principales avec préfixage automatique
- Client Keyv Redis : Opérations de couche de stockage avec gestion des préfixes dans
cacheFactory.js
Optimisation de la mémoire
Utilisez FORCED_IN_MEMORY_CACHE_NAMESPACES pour optimiser les performances en conservant en mémoire les petits jeux de données fréquemment consultés, tout en utilisant Redis pour les caches plus volumineux.
Exemples de configuration
Configuration du développement
Configuration de production
Configuration du cluster
Flux reprenables
Redis active les Resumable Streams pour les déploiements mis à l'échelle horizontalement. Lorsqu'ils sont activés, les réponses de l'IA peuvent se reconnecter et reprendre de manière transparente entre les instances de serveur.
Important : Lorsque USE_REDIS=true, les flux reprenables utilisent automatiquement Redis pour la coordination entre instances. Il s'agit de la configuration recommandée pour les déploiements mis à l'échelle horizontalement où les utilisateurs peuvent se connecter à différentes instances de serveur.
Remarque : Si vous exécutez une instance unique de LibreChat, Redis pour les flux reprenables est généralement superflu ; le mode en mémoire intégré fonctionne très bien. Redis devient essentiel lorsque vous avez plusieurs instances de LibreChat derrière un équilibreur de charge, où la reconnexion d'un utilisateur pourrait atteindre un serveur différent de celui où son flux a commencé.
Configuration
Avantages clés (pour la mise à l'échelle horizontale)
- Continuité inter-instance : Les utilisateurs peuvent démarrer une génération sur un serveur et la reprendre sur un autre
- Déploiements progressifs : Les flux actifs survivent aux redémarrages du serveur
- Synchronisation multi-onglets : La même conversation est synchronisée sur plusieurs onglets de navigateur dans un environnement à charge équilibrée
- Résilience de la connexion : Reconnexion automatique, quel que soit le serveur qui traite la requête
Configuration du cluster
Pour les déploiements Redis Cluster, LibreChat utilise automatiquement des clés avec hash-tag pour garantir que les opérations de flux restent dans le même slot de cluster :
Voir Resumable Streams pour plus de détails sur cette fonctionnalité.
Que pensez-vous de ce guide ?