Pourquoi auto-héberger Redis sur un VPS
Redis vit en mémoire : sa performance dépend directement de la RAM et de la latence réseau. Les offres managées facturent chaque Go de RAM très cher et imposent des plafonds de connexions. Sur un VPS, vous dimensionnez la RAM selon votre besoin réel, vous configurez librement maxmemory et la politique d'éviction (allkeys-lru, volatile-ttl...), et vous activez la persistance RDB et/ou AOF selon votre tolérance à la perte de données. Pour un cache applicatif, un broker de jobs (Sidekiq, BullMQ, Celery) ou un store de sessions, un Redis collé à votre application sur le même réseau privé élimine la latence inter-datacenter et réduit drastiquement le coût.
Les bénéfices concrets d'un Redis auto-hébergé
- Latence sub-milliseconde si Redis tourne sur le même VPS ou le même réseau privé que votre app.
- Contrôle de
maxmemoryet de la politique d'éviction selon votre usage cache ou file de jobs. - Persistance au choix : RDB (snapshots), AOF (journal), ou les deux pour la durabilité.
- Coût RAM sans surfacturation : vous payez le forfait VPS, pas le Go de mémoire premium.
- Modules libres : RediSearch, RedisJSON, RedisBloom selon vos besoins.
- Aucun plafond arbitraire sur le nombre de connexions clients simultanées.
Prérequis matériels et logiciels
Redis étant en mémoire, c'est la RAM qui compte, pas le CPU. Pour un cache modeste ou un store de sessions, 1 vCPU et 1 à 2 Go de RAM suffisent — Redis open source est peu gourmand en CPU car il est mono-threadé pour les commandes (les I/O réseau sont asynchrones). Si Redis sert de broker pour des milliers de jobs en file ou stocke des datasets en mémoire de plusieurs Go, dimensionnez la RAM à au moins le double de votre maxmemory cible pour absorber la copie-sur-écriture lors des snapshots RDB : pendant un BGSAVE, le processus fils peut dupliquer temporairement les pages modifiées.
Côté disque, prévoyez au moins 2× la taille de votre dataset si vous activez la persistance RDB ou AOF, plus de l'espace pour la rotation des logs. Côté logiciel : Ubuntu 22.04/24.04 LTS, Docker et Compose v2, un volume persistant pour AOF/RDB si vous activez la persistance, et le paramétrage vm.overcommit_memory=1 sur l'hôte pour éviter les échecs de fork lors des sauvegardes. La désactivation des Transparent Huge Pages (echo never > /sys/kernel/mm/transparent_hugepage/enabled) est également recommandée : Redis la signale explicitement au démarrage si elle est active, car elle peut provoquer des latences et une consommation mémoire anormale.
Déployer Redis avec Docker en production
Préparer l'hôte
Installez Docker, puis réglez
vm.overcommit_memory=1viasysctlpour fiabiliser les snapshots, et désactivez les Transparent Huge Pages. Fermez le port 6379 vers l'extérieur : un Redis exposé sans mot de passe est une cible classique de cryptomineurs.# Persistent via sysctl.conf echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf sysctl -p # Désactiver THP echo never > /sys/kernel/mm/transparent_hugepage/enabledÉcrire le docker-compose.yml
Déclarez un service
redis:7-alpineavec une commande personnalisée pointant vers unredis.confmonté en lecture seule. Activezrequirepass, définissezmaxmemoryetmaxmemory-policy, et montez un volume pour/datasi vous voulez la persistance.services: redis: image: redis:7-alpine command: redis-server /etc/redis/redis.conf volumes: - ./redis.conf:/etc/redis/redis.conf:ro - redis_data:/data restart: unless-stopped ports: - "127.0.0.1:6379:6379" volumes: redis_data:Configurer la sécurité
Dans
redis.conf, la sécurité repose sur plusieurs niveaux complémentaires. Le premier est le binding réseau :bind 127.0.0.1ou votre IP de réseau privé — ne jamais écouter sur0.0.0.0sans protection supplémentaire. Le deuxième est l'authentification :requirepass VOTRE_MOT_DE_PASSE_FORTpour Redis 6 et antérieur ; pour Redis 7, préférez les ACL qui permettent de créer des utilisateurs avec des permissions granulaires :bind 127.0.0.1 requirepass VOTRE_MOT_DE_PASSE_FORT # ACL Redis 7 : utilisateur lecture seule pour votre app aclfile /etc/redis/users.acl # Désactiver les commandes dangereuses rename-command FLUSHALL "" rename-command CONFIG "" rename-command DEBUG ""Le fichier
users.aclpeut déclarer :user app_user on >MOT_DE_PASSE ~* +@read +@write -@dangerous user default offPour un accès distant chiffré, activez le TLS natif Redis (disponible depuis Redis 6) :
tls-port 6380 tls-cert-file /certs/redis.crt tls-key-file /certs/redis.key tls-ca-cert-file /certs/ca.crtAlternativement, un tunnel SSH ou un VPN suffit pour la plupart des cas sans complexité TLS.
Choisir la stratégie de persistance
Redis propose deux mécanismes de persistance, combinables selon vos besoins.
RDB (snapshot) : Redis écrit un instantané du dataset sur disque à intervalles configurables. Rapide au redémarrage, mais vous perdez les données écrites depuis le dernier snapshot en cas de crash.
# Snapshot si 1 clé change en 900 s, 10 clés en 300 s, 10000 clés en 60 s save 900 1 save 300 10 save 60 10000AOF (Append-Only File) : chaque commande d'écriture est journalisée. Plus sûr, légèrement plus lent.
appendfsync everysecest le bon compromis : au pire 1 seconde de données perdues.appendonly yes appendfsync everysec auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mbCombinaison RDB + AOF : au redémarrage, Redis utilise l'AOF (plus complet), et le RDB accélère les sauvegardes complètes périodiques. C'est la stratégie recommandée pour les brokers de jobs critiques.
Pour un pur cache où la perte de données est acceptable, désactivez la persistance :
save ""etappendonly no— vous gagnez en performance et en espace disque.Connecter votre application
Lancez avec
docker compose up -det testez avecdocker compose exec redis redis-cli -a VOTRE_PASS ping. Faites pointer votre application vers le réseau Docker interne plutôt que vers une IP publique, pour la latence et la sécurité.# Test de connectivité docker compose exec redis redis-cli -a VOTRE_PASS ping # PONG # Vérifier la configuration active docker compose exec redis redis-cli -a VOTRE_PASS CONFIG GET maxmemoryPour les applications sur le même hôte Docker, utilisez le nom du service comme hôte (
redis:6379) plutôt quelocalhostou l'IP publique.Surveiller la mémoire
Surveillez
used_memoryetevicted_keysviaredis-cli INFO. Si les évictions montent, augmentez la RAM ou affinez la politique. Configurez une alerte quand l'utilisation mémoire dépasse 80% demaxmemory.# Vue d'ensemble santé Redis redis-cli -a VOTRE_PASS INFO memory | grep -E 'used_memory_human|maxmemory_human|mem_fragmentation_ratio' redis-cli -a VOTRE_PASS INFO stats | grep -E 'evicted_keys|keyspace_hits|keyspace_misses'Un
mem_fragmentation_ratiosupérieur à 1,5 indique une fragmentation significative : unMEMORY PURGEou un redémarrage progressif peut être utile.Se connecter la première fois
Ouvrez l'URL : RedisInsight s'affiche directement, SANS aucune demande d'identifiant (vous acceptez seulement les conditions d'utilisation au premier écran), et votre base Redis locale y est déjà accessible en lecture/écriture. N'attachez pas de domaine public à cette interface sans protection en amont.
Dépannage : les erreurs les plus fréquentes
Voici les erreurs que vous rencontrerez le plus souvent lors de l'exploitation de Redis sur VPS, avec leur cause et leur remède.
MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist on disk— Redis tente un snapshot mais le fork échoue. Cause :vm.overcommit_memoryest à 0 sur l'hôte. Correction :sysctl vm.overcommit_memory=1(permanent dans/etc/sysctl.conf). Si vous utilisez Docker, ce paramètre doit être posé sur l'hôte Docker, pas dans le conteneur.ERR max number of clients reached— Le nombre de connexions simultanées dépassemaxclients(défaut : 10 000). Causes fréquentes : pool de connexions mal configuré côté application (Sidekiq, Laravel Horizon, etc.) ou connexions non fermées. Correction : augmentezmaxclientsdansredis.confet vérifiez la configuration du pool côté app. La commanderedis-cli CLIENT LISTliste les connexions actives.- OOM Killer tue le processus Redis — Le noyau Linux tue Redis faute de mémoire libre. Cause :
maxmemorynon défini ou trop généreux, couplé à la copie-sur-écriture du fork RDB. Correction : fixezmaxmemoryà 60-70 % de la RAM disponible, choisissez une politique d'éviction (maxmemory-policy allkeys-lrupour un cache,noevictionpour un broker), et prévoyez 2× le dataset pour le fork RDB. Surveillez/var/log/syslogpour les messagesOut of memory: Kill process. Could not create server TCP listening socket 0.0.0.0:6379: bind: Address already in use— Un autre processus occupe le port 6379. Identifiez-le avecss -tlnp | grep 6379et arrêtez-le, ou changez le port Redis dans votre configuration. Sur les VPS avec une instance Redis installée viaapt, le service système peut conflicuer avec votre conteneur Docker.
Haute disponibilité : Sentinel et Cluster
Pour les workloads critiques où une indisponibilité de Redis est inacceptable, deux solutions existent.
Redis Sentinel est la solution de haute disponibilité pour une architecture maître/répliques. Déployez trois nœuds Sentinel sur trois VPS distincts : Sentinel surveille le maître, détecte sa défaillance, et promeut automatiquement un réplique. Vos applications se connectent via le service Sentinel plutôt que directement au maître — elles sont transparentes au basculement. Sentinel convient pour la plupart des cas : cache, sessions, brokers de jobs avec durabilité.
Redis Cluster partitionne les données sur plusieurs nœuds (sharding horizontal) et offre une haute disponibilité intégrée. Il exige au minimum 6 nœuds (3 maîtres + 3 répliques) et une adaptation de votre client. À réserver aux datasets dépassant la RAM d'un seul serveur ou aux workloads nécessitant un débit d'écriture très élevé.
Pour la grande majorité des usages sur VPS, Sentinel sur 3 nœuds est la bonne réponse : plus simple à opérer, compatible avec tous les clients Redis standards, et suffisant pour des datasets de quelques dizaines de Go.
Mises à jour et alternative Valkey
Sur les versions. Redis 7.4 est la branche stable LTS en cours (7.4.11 au moment de la rédaction). Redis 8 est la dernière version majeure GA, publiée en mai 2025, qui a également marqué l'adoption de l'AGPLv3 comme troisième option de licence — aux côtés du RSALv2 et du SSPLv1 adoptés en mars 2024. Pour une migration de Redis 7.x vers Redis 8, consultez les release notes officielles : des changements de comportement sur la gestion mémoire et les ACL sont à anticiper.
Sur la licence. En mars 2024, Redis Ltd. a abandonné la licence BSD 3-Clause pour une double licence RSALv2 + SSPLv1 (non approuvée OSI). En réponse, la Linux Foundation a créé Valkey le 28 mars 2024 — un fork de Redis 7.2.4 sous licence BSD 3-Clause, soutenu par AWS, Google Cloud, Oracle et d'autres membres fondateurs. Valkey suit une trajectoire de développement indépendante et publie ses propres releases. Si votre usage implique de la redistribution ou des restrictions de licence, ou si vous souhaitez un fork 100 % open source au sens OSI, Valkey est une alternative directe : les APIs et protocoles sont compatibles, et la migration est généralement transparente. Un article dédié compare les deux projets en détail : Valkey vs Redis en 2026 : faut-il migrer ?
Pour les usages privés courants (cache d'application, broker de jobs, store de sessions sur votre propre infrastructure), Redis 7.x ou 8 reste pleinement utilisable sans friction de licence.
Surveillez le ratio keyspace_hits / keyspace_misses via INFO stats : un taux de hit faible signifie que votre cache est mal dimensionné ou que vos TTL sont trop courts. Pour les workloads critiques, déployez Redis Sentinel sur trois VPS afin d'obtenir un failover automatique : si le maître tombe, un esclave est promu sans intervention, et vos applications sont redirigées via le service Sentinel.
La documentation officielle
Pour la configuration avancée et les options propres à l'outil, référez-vous à la documentation officielle de Redis. Ce guide couvre la mise en ligne sur VPS ; la doc éditeur reste la référence pour les réglages fins, les mises à jour majeures et les cas d'usage spécifiques.