Lab Valkey : apprendre un magasin clé-valeur compatible Redis, avec expiration, listes et compteurs
Ce lab donne à chaque élève son propre serveur Valkey auquel taper des commandes. Valkey est un magasin clé-valeur : il garde une valeur sous un nom et la rend quand on la demande, ce que les sites web utilisent pour les sessions, les caches et les compteurs. Il comprend les mêmes commandes que Redis, ce que l’élève apprend ici se transpose donc.
Ce n’est pas un lab d’attaque. Chaque copie n’a aucune route vers internet ni vers un autre élève, et elle n’a pas de page web : tout se tape dans le terminal à côté.
Ce que les élèves apprennent
En quoi un magasin clé-valeur diffère d’une table : SET et GET rangent et lisent une valeur par sa clé, une clé peut recevoir une durée de vie avec EX et se décompter avec TTL, et le magasin a quelques structures à lui, une liste (RPUSH, LRANGE), un hachage de champs nommés (HSET, HGETALL) et un compteur (INCR) qui additionne exactement même quand beaucoup de clients le demandent en même temps. Ils lisent aussi les réponses du magasin, le protocole appelé RESP, et voient ce qui survit à l’arrêt du lab : les données sont gardées en mémoire, et chaque écriture est consignée dans un fichier d’un volume nommé, ce qui permet de les retrouver. Il convient à une introduction aux bases de données et aux magasins de données, ou aux caches et aux sessions du développement web.
Le lancer dans votre navigateur
Le lab démarre un seul service, valkey, et attend qu’il réponde. Le terminal n’a pas le client Valkey habituel, valkey-cli. La leçon envoie donc chaque commande avec nc, par une fonction d’une ligne appelée v, et les réponses s’affichent telles qu’elles arrivent : +OK pour un succès, $5 puis le texte pour une valeur de cinq octets, $-1 pour une clé absente et :3 pour un nombre.
- Ouvrir la page Conteneur. Ouvrez « Créer » dans la barre et choisissez « Lancer un conteneur ». Tout le monde peut ouvrir la page, et le lab Git et le lab SQL se lancent sans compte. Tous les autres labs demandent un compte gratuit : créez-en un, connectez-vous, puis appuyez sur « Démarrer ».
- Trouver le lab. La carte « Laboratoires d’exemple » liste tous les exemples. Trouvez Valkey.
- Appuyer sur Démarrer. « Démarrer » le lance tel quel, en un clic. « Modifier le fichier d’abord » ouvre le fichier compose pour que vous puissiez le changer avant de démarrer.
- L’ouvrir. Sur la page du lab, appuyez sur « Ouvrir le terminal ». Il n’y a aucun lien sous « Dans votre navigateur », car Valkey n’a pas de page web. Tapez nc valkey 6379 puis SET greeting hello, appuyez sur Entrée, et le magasin répond +OK. GET greeting répond $5 puis hello. La leçon définit la fonction v pour que v SET greeting hello fasse la même chose sans ouvrir d’abord une connexion.
Que demander aux élèves de rendre
Les réponses d’une courte session à eux : une clé avec une expiration et TTL qui décompte, une liste, un hachage et un compteur. Puis une phrase sur ce qu’a fait l’expiration, et une sur ce qui était encore là après l’arrêt et le redémarrage du lab, et pourquoi. La dernière montre s’ils ont compris la différence entre des données en mémoire et un fichier dans un volume.
Une leçon de base sur ce lab
Valkey Basics est une petite leçon qui se fait dans ce lab. L’élève y crée la fonction v, range et lit une valeur, donne cinq secondes de vie à une clé et la voit disparaître, puis ajoute à une liste, à un hachage et à un compteur. Il arrête ensuite puis relance le lab pour voir ce qui a été conservé.
Les comptes personnels gratuits l’ont dans le module Basics, qui se trouve sur l’« Accueil », chaque établissement peut la copier depuis le dossier Basics de la Bibliothèque, et un nouvel établissement l’a dans un module appelé Lab Basics (Sample). Elle est volontairement petite : elle montre à un enseignant ce qu’est une leçon qui se fait dans un lab, et le lab fait le reste. Copiez-la dans un module à vous pour la modifier.
Le code sur GitHub
Le fichier compose n’a pas de Dockerfile : il lance une image publique standard, valkey/valkey, figée à une version, avec un utilisateur sans privilèges, 64 Mo de mémoire et un fichier d’ajout seul dans un volume nommé. Valkey est sous licence BSD-3-Clause et n’est pas distribué par nous. C’est le fork libre de Redis, utilisé ici à la place de Redis 8 et suivants, qui ont une autre licence. Le lab n’a aucun accès à internet et aucun mot de passe, puisque rien d’autre ne peut atteindre le magasin ; il n’a qu’un service, les fonctions qui demandent un second serveur, comme la réplication, n’en font donc pas partie.
En faire un travail
Indiquez dans la tâche ce qu’il faut rendre.
- Créer le lab. Dans votre module, ajoutez une tâche et choisissez la carte « Lab de conteneurs », puis « Dans un dépôt GitHub ». Indiquez https://github.com/mitsurutech/lab-valkey avec la branche main. Le fichier compose par défaut est compose.yaml. Faites d’abord un fork du dépôt si vous voulez le modifier.
- Publier et l’essayer. « Publier » fige le commit qui vous a été montré : un changement ultérieur dans le dépôt ne modifie donc pas un lab que vous avez déjà proposé. Démarrez d’abord votre propre copie.
- Le distribuer. Attribuez-le comme n’importe quelle tâche, avec une échéance si vous le souhaitez, et indiquez dans la tâche ce qu’il faut faire et ce qu’il faut rendre.
- Noter ce qui est rendu. Ouvrez la copie d’un élève et le travail rendu, notez-le et renvoyez-le avec un motif s’il demande un complément.
Questions fréquentes
- Est-ce Redis ?
- C’est Valkey, le fork libre de Redis, et il répond aux mêmes commandes. Le lab utilise Valkey parce qu’il est sous licence BSD-3-Clause, ce qui n’est pas le cas de Redis 8 et suivants.
- Pourquoi le terminal utilise-t-il nc et pas valkey-cli ?
- Le terminal du lab contient psql, mariadb, curl, git et nc, mais aucun client Valkey. Valkey accepte une commande sous forme d’une ligne de texte, nc peut donc l’envoyer et afficher la réponse. Sur votre propre machine, vous pouvez utiliser valkey-cli ou redis-cli avec le même lab.
- Que reste-t-il après avoir arrêté puis relancé le lab ?
- Ce qui a été écrit et n’avait pas expiré. Le magasin consigne chaque écriture dans un fichier d’un volume nommé, que la plateforme conserve, et reconstruit sa mémoire à partir de lui au démarrage. Une clé dont la durée de vie est écoulée reste absente.