# Redis, pour le cache mais pas que !

> 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` :

```text
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` :

```text
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 :

- Redis Labs [https://redis.com/fr/](https://redis.com/fr/)
- AWS ElastiCache for Redis [https://aws.amazon.com/elasticache/redis/](https://aws.amazon.com/elasticache/redis/)
- Google Cloud Memorystore for Redis [https://cloud.google.com/memorystore](https://cloud.google.com/memorystore)
- Microsoft Azure Cache for Redis [https://azure.microsoft.com/en-us/products/cache](https://azure.microsoft.com/en-us/products/cache)
- Upstash [https://upstash.com/](https://upstash.com/)

## Se former sur Redis

- [https://university.redis.com/](https://university.redis.com/)
- [https://www.youtube.com/redisinc](https://www.youtube.com/redisinc)

## 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 !
