Dans cet épisode, nous allons évoquer le système de stockage de données Redis. Alex, s’intéresse et travaille avec Redis depuis quelques mois. Il a découvert tout un tas de fonctionnalités que beaucoup d’entre nous ignorent. En effet, pour une majorité, Redis est utilisé pour mettre en cache des données brut. Un épisode de podcast qui devrait vous donner envie d’en savoir plus sur Redis !

Historique

Redis a été créé en 2009 par Salvatore Sanfilippo. Il s’agit d’une base de données NoSQL en mémoire. Les fonctions sont plutôt simples avec des get, set et le gros avantage de ce système de base de données est la vitesse.

Il est possible de faire persister les données avec Redis en utilisant la fonction de sauvegarde de Redis. Cette fonction crée une sauvegarde des données enregistrées dans Redis dans un fichier sur le disque dur. Il est également possible d'utiliser la réplication Redis pour sauvegarder les données en temps réel sur un autre serveur. Cela permet de récupérer rapidement les données en cas de panne ou de défaillance du serveur principal.

Les types de données dans Redis

Redis prend en charge plusieurs types de données, notamment:

  • Strings
  • Lists
  • Sets
  • Sorted sets
  • Hashes
  • Stream
  • Géo spatiale (avec module sup.)
  • Json (avec module sup.)

Les valeurs stockées peuvent être des chaînes de caractères, des nombres, des tableaux ou des objets. Les types de données peuvent être combinés pour créer des structures de données plus complexes.

Redis prend aussi en charge les données géospatiales. Cela permet de stocker des données géographiques, telles que des points, des lignes et des polygones, et de les interroger en utilisant des fonctions géospatiales comme la recherche de points à proximité et le calcul de la distance entre deux points.

Pour stocker des données géospatiales dans Redis, vous pouvez utiliser la commande GEOADD pour ajouter des points à une clé géographique, et la commande GEORADIUS pour rechercher des points à proximité d'un point donné. Voici un exemple de commande GEOADD :

GEOADD villes 13.361389 38.115556 "Marseille" 2.352222 48.856614 "Paris"

Cette commande ajoute deux points à la clé "villes", représentant les villes de Marseille et de Paris avec leurs coordonnées géographiques respectives.

Pour interroger des données géospatiales dans Redis, vous pouvez utiliser la commande GEORADIUS pour rechercher des points à l'intérieur d'un rayon donné autour d'un point donné. Voici un exemple de commande GEORADIUS :

GEORADIUS villes 13.377778 38.895556 100 km

Cette commande recherche tous les points à l'intérieur d'un rayon de 100 km autour de la ville de Naples, qui se trouve aux coordonnées géographiques 13.377778 et 38.895556.

Il est important de noter que le module RedisGEO utilise l'algorithme de géohash pour indexer les données géographiques, ce qui permet des performances élevées même pour de grandes bases de données. Cependant, il est recommandé d'utiliser des structures de données plus spécifiques, comme des ensembles, des listes ou des hachages, pour stocker et interroger vos données si vous n'avez pas besoin de fonctions géospatiales.

Il existe aussi un module RedisJSON qui permet de stocker des données JSON directement dans Redis. Ce module permet notamment de stocker des objets JSON de manière très performante, d'interroger les données JSON avec des requêtes avancées et de manipuler les données JSON dans Redis avec une syntaxe familière. Il est disponible en téléchargement sur le site de Redis Labs et peut être utilisé avec toutes les versions de Redis à partir de la version 4.0.

Les requêtes avec Redis

Pour interroger une base de données Redis, vous pouvez utiliser le langage de requête Redis, qui est similaire à la syntaxe de requête SQL. Voici quelques exemples de requêtes Redis :

  • GET nom:utilisateur:1 : récupère les informations de l'utilisateur 1
  • LRANGE panier:utilisateur:1 0 -1 : récupère tous les éléments du panier de l'utilisateur 1
  • ZREVRANGE score:jeu:1 0 9 WITHSCORES : récupère les 10 meilleurs scores du jeu 1, avec leurs scores associés
  • HGETALL messages:non-lus:utilisateur:1 : récupère tous les messages non lus de l'utilisateur 1, avec leurs clés et leurs valeurs associées
  • KEYS dernières:vues:utilisateur:* : récupère toutes les clés associées aux derniers éléments consultés par tous les utilisateurs

Il est important de noter que la commande KEYS peut être très coûteuse en termes de performances pour de grandes bases de données, car elle parcourt toutes les clés de la base de données. Il est donc recommandé d'éviter de l'utiliser dans des environnements de production. Au lieu de cela, vous pouvez utiliser des structures de données plus spécifiques, comme des ensembles, des listes ou des hachages, pour stocker et interroger vos données.

La sécurité avec Redis

Redis prend en charge l'authentification par mot de passe et la connexion SSL/TLS pour la sécurité des communications. Cependant, il n'y a pas de mécanisme de contrôle d'accès intégré dans la version open source de Redis. Si vous avez besoin d'une gestion des utilisateurs et des permissions, vous devrez utiliser Redis Enterprise, la version commerciale de Redis. Il est également important de noter que Redis n'est pas une base de données sécurisée par défaut et qu'il est important de configurer correctement les paramètres de sécurité pour éviter les attaques.

Exemples de services cloud pour utiliser Redis :

Se former sur Redis

Sommaire :

00:00 Intro 01:40 Histoire de Redis 02:40 Fonctionnement de base Redis 07:40 Les types de valeurs possibles 17:12 Json dans Redis 19:00 Les valeurs géospatiales avec Redis 24:00 Les queries avec Redis 32:40 La sécurité et les droits 34:40 Héberger et utiliser Redis 37:30 Redis est bien open-source 39:00 Redis dans le cloud 45:40 Se former sur Redis 50:50 Conclusion

Bonne écoute !

45% vers l'objectif de 70$ par mois

L'ensemble des charges seront couvertes. Service de stockage et abonnement aux services utilisés.

Abonnez-vous sur votre plateforme de podcast préférée

> //
Copyright DOUBLE-SLASH 2020 - 2024 - Tous les droits sont réservés.