
Code-Garage #48 - Découvrons Redis ensemble
Durée: 12m31s
Date de sortie: 07/02/2023
Redis est un système de gestion de base de données NoSQL, il est réputé pour être extrêmement rapide, mais l'est-il vraiment ? Et pourquoi peut-on l'utiliser ?
Notes de l'épisode :
Notes de l'épisode :
- Article d'origine : https://code-garage.fr/blog/redis-une-base-de-donnees-rapide-comme-l-eclair/
- Documentation officielle : https://redis.io/docs/
Salut et bienvenue dans ce nouvel épisode du podcast de Code Garage, je m'appelle Nicolas
Brondin-Bernard et aujourd'hui on va parler de Redis. Quand on parle de bases de données,
on pense souvent aux bases relationnelles comme MySQL, MariaDB, PostgreSQL, mais tous les
systèmes de gestion de bases de données, on parle de SGBD, ne sont pas tous relationnels
et tous n'utilisent pas le langage SQL. On regroupe en gros tous ces systèmes sous
un nom, sous une bannière, le NoSQL, qui veut littéralement dire pas de SQL. Mais en vrai,
sous cette bannière qui est très voire trop large, on y retrouve des systèmes très très
différents comme des bases de données de documents, de graffes ou encore des dictionnaires clé-valeurs.
Aujourd'hui on va parler de Redis qui est une des bases NoSQL les plus populaires et surtout les
plus rapides du marché. Alors, c'est quoi les particularités de Redis ? Redis c'est avant tout
un système de bases de données, donc son rôle est de recevoir des données, de les stocker et de les
redistribuer à la demande, mais son fonctionnement, il diffère assez largement des systèmes les plus
classiques qu'on connaît et notamment au travers de trois particularités bien distinctes. La
première, c'est ce qu'on appelle les données in-memory. La majorité des SGPD, ils stockent les
données collectées sur un disque dur physique, mais pour améliorer la rapidité de son système,
donc Salvatore Sanfilippo, le créateur de Redis, il décide que les données injectées dans ce SGPD
seront directement stockées dans la mémoire vive dans la rame de la machine. Alors évidemment,
il y a des copies de ces données qui sont faites très régulièrement et qui sont stockées sous
forme de fichiers binaire pour que les données puissent être rechargées et remontées en rames
pendant une défaillance de la machine. Mais ce stockage en mémoire vive en fait une des bases
de données les plus rapides justement pour l'accès aux données que ce soit en lecture ou en
écriture. Alors pour la petite référence, la documentation officielle de Redis stipule que
Redis est capable de scanner une base de 1 million de clés en 40 millisecondes en tournant
sur un ordinateur portable entrée de gamme. Voilà, donc ça vous donne un petit peu juste une valeur
de référence. Ensuite, on a le stockage clé valeurs. Donc ici, avec Redis, on n'a pas de table,
pas de documents, mais pour chaque entrée dans la base, une valeur associée à une clé unique.
On parle plus souvent de dictionnaires et d'ailleurs, c'est là que vient le nom de Redis
qui signifie en réalité remote dictionary server. Si vous avez l'habitude d'indexer vos données avec
des clés primaires et secondaires, dites-vous que Redis ne contient qu'un seul index. C'est celui des
clés présentes dans la base. Si vous avez l'habitude d'utiliser le local storage par exemple dans
le web ou il y a des user storage aussi en Android, iOS, etc., c'est exactement la même chose. C'est
un stockage clé valeurs indictionnaires. Donc ici, pas d'auto-incrémentation, etc. C'est vous qui
décidez du nom de chaque clé pour chaque valeur que vous allez stocker. Pour qu'elle soit unique,
les clés sont souvent composés de plusieurs namespace et le plus souvent ces namespace sont
séparés par deux points. Donc ce qui nous donne par exemple user 2. NicolasArobazcodegarage.com,
je sais pas, une vraie adresse, ou encore analytics 2.signup 2.2020 2.02 2.17. Là,
en voyant cette clé, on peut arriver à deviner qu'effectivement on va peut-être avoir le nombre
d'inscrits sur la journée du 17 février 2020. Donc les clés, ce n'est pas seulement juste un chiffre
comme ça, ça porte une règle sémantique et ça va être important dans la manière dont on va
insérer et surtout récupérer ces données. Ensuite, une autre caractéristique de Redis,
c'est le type des données. Parce que derrière chaque clé dans la base, comme je l'ai dit,
se trouve une valeur, mais cette valeur elle peut prendre différents types,
comme dans n'importe quelle langage de programmation, en allant de la simple chaîne de caractère,
une string, jusqu'à des types complexes et qui seront plutôt très pratiques. Donc je vous en
fais une petite liste non exhaustive, mais on a les chaînes de caractère évidemment. On peut
avoir une liste de valeurs, le type s'appelle liste, un ensemble non ordonné, un set,
un ensemble ordonné, un sorté de set ou un dictionnaire, un hash. Si vous n'êtes pas forcément
familier avec ce genre de structure de données, un set, c'est un ensemble, donc c'est une liste
dont les valeurs ne doivent pas se répéter. Et le dictionnaire, le hash, ça permet de stocker des
objets sous la forme de clés valeurs comme un jason. Donc ça veut dire qu'en réalité,
une clé, enfin derrière une clé Redis peut se cacher un autre objet sous la forme d'un objet
avec des clés valeurs encore, d'un mini-souditionnaire. Alors maintenant, on va aborder quelques
fonctionnalités qui sont plus ou moins spécifiques à Redis, parce que effectivement, c'est une base
de données qui offre d'assez nombreuses fonctionnalités pour retrouver une clé ou un ensemble de clés
très rapidement. On l'a dit, c'est un index, donc c'est aussi le but pour ensuite récupérer la
valeur, la modifier ou la supprimer. Donc comme lorsque vous utilisez un vrai dictionnaire dans
un vrai vie, vous n'allez pas rechercher une définition précise pour trouver le mot. Ça serait
trop long. Si vous avez la définition précise en tête et que vous cherchez juste le mot, vous allez
devoir passer par toutes les définitions pour arriver à trouver le mot que vous voulez. Non,
ce qu'on fait, c'est qu'on cherche d'abord un mot trié dans un ordonnik dans un dictionnaire par
ordre alphabetique et ensuite on va récupérer sa définition. Ici, c'est la même chose. On a un
ensemble de commandes pour parcourir ce dictionnaire et le modifier et pour le reste, c'est à vous de
faire attention à la manière dont vous allez penser et créer vos clés, comme les gens qui créent
les dictionnaires, on crée des mots et les ont ordonnés par ordre alphabetique. Alors pour créer
une clé, Redis, ce qui est pratique, c'est qu'on ne lui demande pas vraiment de créer une nouvelle
clé. On rentre par non simplement une valeur associée à une clé. Si la clé existe déjà et
la valeur est modifiée, sinon, il crée la clé. Ça se fait avec une commande très simple. C'est
7. On fait 7, on donne le nom de la clé et on donne la valeur. On peut même faire m7 et plusieurs
clés et plusieurs valeurs à la suite. Là, c'est un peu compliqué d'avoir les commandes à l'oral,
mais si jamais vous voulez voir ces commandes, vous avez le lien de l'article d'origine avec
toutes ces commandes-là directement dans les notes de l'épisode. Ensuite, on a évidemment toutes
les opérations multiples parce qu'on peut faire, si on fait 7 pour mettre une nouvelle clé dans la
base donnée, on fait get pour récupérer avec le nom de la clé pour récupérer la valeur, mais du
coup, on peut faire des opérations multiples. On peut faire mget avec plusieurs clés et on va
récupérer les valeurs de ces clés. On peut faire delete une clé. Pas delete, c'est del,
del et une clé. Et si on veut, on peut faire del avec plusieurs clés, les unes à la suite des
autres. Ça va directement supprimer plusieurs clés. Ce qui est hyper pratique, c'est qu'on
peut rechercher une clé par pattern. Pour rechercher, on va vraiment rechercher, là,
une clé. On ne va pas rechercher une valeur. Par exemple, je vous disais un exemple de base
donnée contenant des clés. On pourrait avoir user 2 points et une adresse mail. Je pourrais faire
avec la commande quiz, user 2 points étoiles et arrobat gmail.com. Ça nous renverraient
toutes les clés qui existent dans la base de données et qui, étoiles est remplacées comme
dans une expression régulière par n'importe quelle chaîne de caractère. On pourrait avoir la liste
de tous les utilisateurs qui ont une adresse en gmail, par exemple. On peut évidemment faire des
transactions aux sens atomiques, le côté acide. Si vous voulez, vous avez un mot clé qui s'appelle
multi. Vous écrivez multi. Ensuite, vous faites toutes vos opérations, vos guides, vos sets,
etc. vos deletes. Et à la fin, il faudra appeler la commande exec, et bien, tout simplement pour
exécuter réellement votre transaction. Alors évidemment, il y en a bien d'autres. Le but,
c'est pas de faire une liste exorciste de toutes les fonctionnalités, mais c'est simplement de vous
montrer que la première prise en main de Redis, elle est accessible à la majorité des développeurs
et des développeuses, centre d'obstacles. Pour aller plus loin, il est possible de gérer des flux,
des données géospatiales, de gérer des envois de messages en temps réel avec une mécanique
pubsub, etc. Mais juste avec Get, Set, MGet, etc. et les transactions, vous pouvez déjà quasiment
faire tout ce que vous voulez avec une base Redis. Alors si jamais vous avez compris un petit peu
mon cerf de Redis, mais que vous n'avez pas encore vraiment des cas d'usage en tête, je vais vous les
donner. Parce que parmi les entreprises qui utilisent Redis, on peut quand même notamment citer Twitter,
GitHub, Snapchat, Stack Overflow, et ça, c'est une fraction des utilisateurs, mais qui montre
réellement l'intérêt et la solidité de la technologie. Mais au final, à quoi va nous servir
Redis ? Est-ce qu'on peut s'en servir comme une base de données classiques ? Alors oui, on peut s'en
servir comme une base de données classiques, relationnelles, mais en réalité, ce n'est pas
une base relationnelle. Donc ce n'est pas le meilleur usage que vous puissiez en faire. Le conseil qu'on
donne toujours chez Congarage, c'est si vous avez des relations entre vos données, des relations fortes,
vous prenez un SGBD relationnel. Mais par contre, l'intérêt de Redis, c'est de tourner en parallèle
de votre SGBD relationnel pour gérer des données spécifiques, soit parce qu'elles sont très nombreuses,
soit parce que c'est des données qui nécessitent une vitesse de lecture ou d'écriture très élevée.
Alors, par exemple, pourquoi on peut utiliser une base de Redis ? On l'utilise beaucoup pour faire
de la mise en cache. On peut faire de la mise en cache de page HTML, par exemple, ou votre clé,
ça sera tout simplement une URL, et puis vous allez cacher tout le contenu de votre page. Ça peut
être pour mettre en cache des résultats de données SQL. En clé, vous allez avoir votre
quête SQL complète et la donnée, la valeur associée, ça sera le résultat de votre quête. On peut
s'en servir pour stocker des sessions utilisateurs. On peut stocker des notifications d'un réseau
social. Toutes les notifications qui sont en attente de lecture ou etc. à toutes celles qui sont
parchivées, ça sera plus efficace de les gérer avec Redis qu'avec un SGBD classique. Ça peut être
de l'analyse en temps réel, des statistiques, etc. Donc là, je vous donne quelques usages,
mais évidemment, maintenant, ce sera à vous de trouver quel usage vous allez pouvoir faire de cette
base de données dans l'architecture de votre projet. Moi, ce que je vous recommande, c'est vraiment
d'y jeter un œil, de lui donner sa chance parce que vous allez voir que sûrement en termes de rapidité
de traitement, ça va vous bluffer. J'espère que cet épisode vous aura appris quelque chose,
vous aurez apporté un petit peu de connaissance et vous aurez donné envie de tester Redis.
Je vous donne rendez-vous la semaine prochaine pour un nouvel épisode du podcast et sinon sur
code-garage.fr, code-garage, c'est le site de cours en ligne pour les développeurs où vous payez
un forfait par mois, 19 euros, 99 et vous avez accès absolument à tous les cours qui sont
disponibles sur la plateforme en illimité avec les exercices, les quizzes, etc. Donc je vous donne
rendez-vous à très bientôt pour un prochain épisode ou directement sur la plateforme code-garage. Salut !
Episode suivant:
Les infos glanées
Code-Garage
Découvrons ensemble des sujets passionnants autour du métier de dev et de la programmation en général !
Tags
Code-Garage #49 - Gagner de l'argent avec la programmation