Redis est un store de données en mémoire ultra-rapide qui transforme les performances de vos applications PHP. En cachant les résultats de requêtes SQL, les sessions et les calculs coûteux dans redis, vous pouvez réduire les temps de réponse de 10 à 100 fois.
Pourquoi Redis plutôt que le cache fichier ?
Le cache fichier est simple mais limité : pas de types de données avancés, pas d'expiration fine, pas de pub/sub. redis est persistant, distribué, supporte des structures de données riches (listes, sets, hashes, sorted sets) et peut stocker des milliards de clés.
Pour une application PHP à fort trafic, redis est le choix standard pour le caching applicatif, les sessions et les files d'attente.
Installation et connexion PHP
apt install redis-server
pecl install redis
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('votre_mot_de_passe'); // Si configuré
Utilisez Predis (pure PHP) ou phpredis (extension C) selon votre environnement.
Caching de requêtes SQL
Le pattern cache-aside est le plus courant : cherchez dans redis, si absent cherchez en BDD, stockez dans redis :
function getArticle(int $id): ?array {
$key = "article:{$id}";
$cached = $redis->get($key);
if ($cached !== false) {
return json_decode($cached, true);
}
$article = $db->query("SELECT * FROM articles WHERE id = ?", [$id])->fetch();
if ($article) {
$redis->setex($key, 3600, json_encode($article)); // TTL 1h
}
return $article;
}
Types de données Redis avancés
// Hash : stocker un objet structuré
$redis->hMSet("user:42", ['name' => 'Alice', 'email' => 'alice@ex.com']);
$name = $redis->hGet("user:42", "name");
// Sorted Set : leaderboard, files prioritaires
$redis->zAdd("leaderboard", 1500, "alice");
$redis->zAdd("leaderboard", 2000, "bob");
$top = $redis->zRevRange("leaderboard", 0, 9, true); // Top 10
// List : file d'attente FIFO
$redis->lPush("email_queue", json_encode($emailData));
$job = $redis->rPop("email_queue");
Sessions PHP dans Redis
Stocker les sessions PHP dans redis permet de partager les sessions entre plusieurs serveurs et d'éviter les problèmes de sessions sur les disques lents :
; php.ini
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379?auth=password"
Rate limiting avec Redis
function rateLimit(string $ip, int $limit = 100, int $window = 60): bool {
$key = "rate:{$ip}";
$count = $redis->incr($key);
if ($count === 1) {
$redis->expire($key, $window);
}
return $count <= $limit;
}
Pub/Sub pour les notifications temps réel
Redis pub/sub permet des notifications en temps réel entre processus PHP. Couplé à WebSockets ou SSE, c'est une solution simple pour les mises à jour en direct.
Consultez la documentation Redis pour la liste complète des commandes et les patterns avancés de caching.
Conclusion
Redis transforme les performances de vos applications PHP en réduisant drastiquement la charge sur la base de données. Commencez par cacher les requêtes SQL les plus fréquentes, puis migrez les sessions, et enfin explorez les types de données avancés pour des cas d'usage plus sophistiqués comme les leaderboards ou les files d'attente.
Redis va bien au-delà du simple cache : ses structures de données avancées en font un outil polyvalent pour les files de messages, sessions distribuées, rate limiting et pub/sub temps réel. En PHP, l'extension native phpredis est plus performante que Predis. Implémentez le pattern Cache-Aside : lecture du cache, fallback en base si manquant, puis mise en cache du résultat. La cache invalidation par tags évite les incohérences dans les systèmes complexes. Configurez la persistence RDB ou AOF selon votre tolérance à la perte de données. Redis University propose des certifications gratuites pour maîtriser toutes les fonctionnalités avancées de cette base de données en mémoire incontournable.
Redis Cluster pour la haute disponibilité
Pour les applications critiques, Redis Cluster partitionne automatiquement les données sur plusieurs nœuds (minimum 3 masters) et gère la réplication et le failover automatique. Redis Sentinel est une alternative plus légère pour les petits déploiements. La bibliothèque phpredis supporte nativement les deux modes. Dimensionnez votre Redis selon la mémoire des données à cacher, avec une marge de 20% pour les opérations internes de Redis.