Redis garde les données en mémoire et répond en une milliseconde environ, c'est pourquoi il se trouve derrière tant d'applications, comme cache, file d'attente ou stockage de sessions. L'installation tient en une commande. Le travail est dans les réglages par défaut : pas de limite de mémoire, des instantanés qui peuvent perdre les écritures récentes, et deux erreurs faciles qui effacent vos données ou désactivent votre mot de passe sans bruit. Ce guide couvre tout cela sur Ubuntu 24.04. Nous avons exécuté chaque étape sur notre image ; les chiffres viennent d'un serveur Micro (2 vCPU, 2 Go).
Il vous faut un utilisateur avec sudo. Le guide de configuration d'Ubuntu en crée un.
1. Installer
sudo apt update
sudo apt install -y redis-server
redis-server --version
redis-cli ping
L'installation a pris 13 secondes et nous a donné Redis 7.0.15. Il démarre aussitôt et à chaque boot, répond PONG et n'écoute que sur le serveur lui-même : 127.0.0.1:6379 et [::1]:6379, avec protected-mode yes. Sans données, il utilisait 13,5 Mo de RAM.
Le journal contenait déjà un avertissement :
WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition.
Redis enregistre sur le disque depuis une copie de lui-même créée par fork, et avec le réglage par défaut du noyau ce fork peut échouer quand la mémoire manque. Corrigez-le une fois pour toutes :
echo 'vm.overcommit_memory = 1' | sudo tee /etc/sysctl.d/90-redis.conf
sudo sysctl -p /etc/sysctl.d/90-redis.conf
sudo systemctl restart redis-server
Après le redémarrage, l'avertissement avait disparu.
2. Limiter sa mémoire
D'origine, maxmemory vaut 0, c'est-à-dire aucune limite, et la politique est noeviction. Redis prendra de la RAM jusqu'à ce que le serveur en manque. Fixez un plafond et décidez de ce qui se passe quand il est atteint :
redis-cli CONFIG SET maxmemory 256mb
redis-cli CONFIG SET maxmemory-policy allkeys-lru
redis-cli CONFIG REWRITE
Nous avons testé les deux politiques avec une limite de 64 Mo et 400 000 écritures :
noeviction(par défaut) : la mémoire s'est arrêtée à 63 Mo et les nouvelles écritures ont échoué avecOOM command not allowed when used memory > 'maxmemory'. Le bon choix pour une file d'attente ou tout ce que vous ne pouvez pas perdre.allkeys-lru: Redis a supprimé les clés les moins récemment utilisées, 48 606 au total, et toutes les écritures sont passées. Le bon choix pour un cache.
CONFIG REWRITE enregistre les réglages en cours dans /etc/redis/redis.conf, pour qu'ils survivent à un redémarrage. Il ajoute aussi une ligne qu'il faut connaître avant l'étape 4.
3. Choisir comment il enregistre sur le disque
Par défaut, Redis écrit un instantané (/var/lib/redis/dump.rdb) après 1 modification en une heure, 100 en cinq minutes ou 10 000 en une minute. Nous avons testé trois façons de l'arrêter :
| Comment Redis s'est arrêté | Instantanés seuls (par défaut) | Avec le fichier AOF |
|---|---|---|
systemctl restart | Rien de perdu : il enregistre à l'arrêt | Rien de perdu |
Tué avec kill -9 | La clé écrite après le dernier instantané avait disparu | Une clé écrite 2 secondes avant l'arrêt était là |
Dans les deux cas, systemd a relancé Redis tout seul en quelques secondes.
Si Redis contient des données qui vous manqueraient, activez le fichier AOF (append-only file). Il consigne chaque écriture et la vide sur le disque une fois par seconde. Faites-le sur le serveur en marche, pas en modifiant le fichier :
redis-cli CONFIG SET appendonly yes
redis-cli CONFIG REWRITE
redis-cli INFO persistence | grep aof_
Nous avons d'abord essayé l'autre méthode, et elle nous a coûté nos données. Nous avons remplacé appendonly no par appendonly yes dans redis.conf puis redémarré. Redis est revenu avec un AOF vide et n'a rien chargé depuis l'instantané : toutes les clés existantes avaient disparu. Au moment de s'arrêter ensuite, il a aussi écrit son nouveau contenu, sans les anciennes clés, par-dessus dump.rdb. CONFIG SET évite cela : Redis écrit d'abord l'AOF à partir des données en mémoire. Après un redémarrage, toutes nos clés étaient là.
Si Redis n'est qu'un cache qui peut repartir vide, faites l'inverse et désactivez l'enregistrement avec redis-cli CONFIG SET save "".
4. Définir un mot de passe
Voici le second piège. Après n'importe quel CONFIG REWRITE, Redis 7 ajoute cette ligne à la fin de redis.conf :
user default on nopass ~* &* +@all
Elle signifie « l'utilisateur par défaut n'a pas besoin de mot de passe ». Nous avons ensuite ajouté requirepass plus haut dans le fichier et redémarré. Redis répondait toujours PONG sans mot de passe, car la ligne user l'emporte. Définissez plutôt le mot de passe via Redis :
REDIS_PASS=$(openssl rand -hex 24)
echo "$REDIS_PASS"
redis-cli CONFIG SET requirepass "$REDIS_PASS"
REDISCLI_AUTH="$REDIS_PASS" redis-cli CONFIG REWRITE
Gardez le mot de passe en lieu sûr. Redis le stocke désormais sous forme de hachage SHA-256 dans cette même ligne user default. Après un redémarrage, redis-cli ping a répondu NOAUTH Authentication required. et seul le mot de passe fonctionnait. Transmettez-le à redis-cli par la variable REDISCLI_AUTH. Avec -a, il apparaît dans la liste des processus, et redis-cli vous en avertit. Dans votre application, placez-le dans l'URL Redis : redis://:PASSWORD@127.0.0.1:6379/0.
5. Y accéder depuis votre ordinateur
Laissez Redis sur 127.0.0.1 et passez par un tunnel SSH. Utilisez le port SSH de votre serveur, qui sur les offres NAT est votre port personnel :
ssh -N -L 6380:127.0.0.1:6379 deploy@YOUR_SERVER_IP -p 22
Tant que cela tourne, redis-cli -p 6380 et les outils de bureau de votre ordinateur parlent au Redis du serveur. Rien de nouveau n'est ouvert sur internet. Le guide des clés SSH permet au tunnel de se connecter sans mot de passe.
Quelle vitesse
Sur le serveur de test Micro, redis-benchmark avec 50 clients nous a donné :
| Test | Requêtes par seconde | Latence médiane |
|---|---|---|
| SET | 30 303 | 1,0 ms |
| GET | 35 149 | 0,9 ms |
| SET, 16 commandes par aller-retour | 272 109 | 2,4 ms |
| GET, 16 commandes par aller-retour | 414 938 | 1,3 ms |
Pour le cache ou la file de tâches d'une application web, c'est bien plus que nécessaire. Le surplus de vitesse vient de l'envoi des commandes par lots (pipelining).
Quelle offre
Redis a besoin de RAM pour vos données et de peu d'autre chose. Nano (2 vCPU, 1 Go, $3/mois) fait tourner Redis à côté d'une petite application avec maxmemory 256mb. Micro (2 Go, $5/mois) laisse de la place pour un cache plus grand et l'application. Si autre chose doit se connecter directement à Redis, prenez votre propre IPv4 (à partir de Nano-IP à $8/mois) et n'autorisez que cette adresse dans le pare-feu. Toutes les offres sont sur la page VPS, et le paiement se fait en USDT, USDC ou ETH sur Base, Ethereum ou Polygon.
Commentaires
Pas encore de commentaires. Soyez le premier.