1 / 15

Redis : Introduction et Concepts Fondamentaux

Partie 1 - Les bases de données clé-valeur

Remote Dictionary Server
La base de données in-memory la plus populaire

2 / 15

Objectifs de cette partie

  • Comprendre les bases de données NoSQL et le modèle clé-valeur
  • Découvrir Redis : architecture, performances et cas d'usage
  • Installer et configurer Redis
  • Maîtriser les commandes de base
  • Implémenter un premier système de cache
3 / 15

L'écosystème NoSQL

Clé-Valeur

Redis, Memcached, DynamoDB

Stockage simple et rapide

Document

MongoDB, CouchDB

Données semi-structurées

Colonne

Cassandra, HBase

Big Data et séries temporelles

Graphe

Neo4j, ArangoDB

Relations complexes

4 / 15

Le théorème CAP

Consistency
Availability
Partition
Tolerance

Redis privilégie : C P
Consistance et tolérance au partitionnement

5 / 15

Redis vs Bases relationnelles

Aspect Redis SQL (MySQL, PostgreSQL)
Modèle de données Clé-valeur + structures Tables relationnelles
Stockage In-memory (RAM) Sur disque
Performance < 1ms latence 1-100ms latence
Requêtes Commandes simples SQL complexe
Cas d'usage Cache, sessions, temps réel Données persistantes, relations
6 / 15

Qu'est-ce que Redis ?

  • Remote Dictionary Server
  • Base de données in-memory open source (BSD)
  • Créé par Salvatore Sanfilippo en 2009
  • Écrit en C ANSI - Extrêmement performant
  • Single-threaded avec I/O multiplexing
  • Support de la persistance optionnelle
  • Réplication master-slave native

⚡ 100,000+ opérations/seconde sur un serveur standard

7 / 15

Architecture de Redis

💾 In-Memory

Toutes les données en RAM pour des performances maximales

🧵 Single-threaded

Pas de locks, pas de race conditions, simplicité

📊 Structures riches

Plus qu'un simple cache : Lists, Sets, Hashes, Streams...

💿 Persistance

RDB snapshots + AOF log pour la durabilité

8 / 15

Cas d'usage principaux

🚀 Cache

Cache de requêtes DB, API, pages web

🔑 Sessions

Stockage de sessions utilisateur distribuées

📈 Analytics

Compteurs temps réel, statistiques

🏆 Leaderboards

Classements et scoring en temps réel

💬 Messaging

Pub/Sub, queues, chat temps réel

🔒 Rate Limiting

Limitation d'API, anti-spam

9 / 15

Installation de Redis

Linux/macOS

# Ubuntu/Debian
sudo apt-get update
sudo apt-get install redis-server

# macOS avec Homebrew
brew install redis

# Démarrage du serveur
redis-server

Windows

# Via WSL2 (recommandé)
wsl --install
# Puis suivre les instructions Linux
10 / 15

Redis CLI - Interface en ligne de commande

# Connexion au serveur Redis
redis-cli

# Connexion à un serveur distant
redis-cli -h hostname -p 6379 -a password

# Test de connexion
127.0.0.1:6379> PING
PONG

# Informations serveur
127.0.0.1:6379> INFO server
11 / 15

Commandes de base

# SET - Définir une clé
SET user:1001:name "Ahmed Benjelloun"
OK

# GET - Récupérer une valeur
GET user:1001:name
"Ahmed Benjelloun"

# EXISTS - Vérifier l'existence
EXISTS user:1001:name
(integer) 1

# DEL - Supprimer une clé
DEL user:1001:name
(integer) 1
12 / 15

TTL et Expiration

# SET avec expiration (secondes)
SET session:abc123 "user:1001" EX 3600
OK

# EXPIRE - Définir une expiration
EXPIRE cache:homepage 300
(integer) 1

# TTL - Temps restant
TTL session:abc123
(integer) 3594

# PERSIST - Supprimer l'expiration
PERSIST session:abc123
(integer) 1
13 / 15

Bonnes pratiques : Nommage des clés

Convention recommandée

# Pattern : object-type:id:field
user:1001:email
user:1001:profile
product:5234:inventory
session:abc123:data
cache:api:users:page:1

# Recherche par pattern
KEYS user:1001:*
1) "user:1001:email"
2) "user:1001:profile"

⚠️ Attention : KEYS est O(n) - À éviter en production !

14 / 15

Exemple : Système de cache simple

# Cache d'une requête API
SET cache:products:bestsellers '[{"id":1,"name":"Argan Oil"},...]' EX 3600

# Compteur de vues
INCR stats:page:home:views
(integer) 1234

# Session utilisateur
SET session:xyz789 '{"userId":1001,"role":"admin"}' EX 7200

# Vérification du cache
GET cache:products:bestsellers
'[{"id":1,"name":"Argan Oil"},...]'
15 / 15

Points clés à retenir

  • Redis = Base de données clé-valeur in-memory ultra-rapide
  • Idéal pour : cache, sessions, temps réel, analytics
  • Commandes simples mais puissantes
  • TTL natif pour l'expiration automatique
  • Conventions de nommage importantes

🚀 Prochaine partie : Structures de données avancées