Guide des commandes Redis avec exemples PHP

Introduction à l'extension PHP Redis

L'extension phpredis offre une interface PHP performante pour interagir avec Redis. Elle permet d'exploiter les fonctionnalités avancées de Redis, comme le tri des listes, pour créer des relations métier en mémoire.

Connexion au serveur Redis

<?php
$redisClient = new Redis();
$redisClient->connect('127.0.0.1', 6379, 2.5);
$redisClient->ping(); // Vérification de la connexion
?>

Opérations sur les clés

Suppression de clés

La commande DEL supprime une ou plusieurs clés spécifiées.

<?php
$redisClient->set('utilisateur:nom', 'Pierre');
echo $redisClient->get('utilisateur:nom'); // Affiche: Pierre

$redisClient->del('utilisateur:nom');
var_dump($redisClient->get('utilisateur:nom')); // bool(false)

$donnees = ['cle1' => 'valeur1', 'cle2' => 'valeur2'];
$redisClient->mset($donnees);
$redisClient->del(['cle1', 'cle2']);
?>

Recherche par motif

KEYS retourne les clés correspondant à un modèle donné.

<?php
$redisClient->mset(['produit:1' => 'pomme', 'produit:2' => 'poire', 'categorie:1' => 'fruits']);
var_dump($redisClient->keys('produit:*')); // ['produit:1', 'produit:2']
?>

Expiration temporelle

EXPIRE définit une durée de vie en secondes pour une clé.

<?php
$redisClient->set('session:123', 'donnees_session');
$redisClient->expire('session:123',132);
echo $redisClient->ttl('session:123'); // Affiche environ 130
?>

Manipulation de chaînes

Assignation conditionnelle

SETNX assigne une valeur uniquement si la clé n'existe pas.

<?php
if ($redisClient->setnx('verrou:compte', 'actif')) {
    echo "Verrou acquis";
} else {
    echo "Verrou déjà pris";
}
?>

Opérations numériques

INCR incrémente la valeur numérique d'une clé.

<?php
$redisClient->set('compteur:vues', 0);
$redisClient->incr('compteur:vues');
echo $redisClient->get('compteur:vues'); // Affiche: 1
?>

Gestion des hachages

Stockage d'objets

Les hachages permettent de stocker des objets structurés.

<?php
$utilisateur = [
    'email' => 'contact@exemple.fr',
    'nom' => 'Dupont',
    'visites' => 5
];
$redisClient->hmset('utilisateur:456', $utilisateur);

echo $redisClient->hget('utilisateur:456', 'nom'); // Dupont
$redisClient->hincrby('utilisateur:456', 'visites', 1);
?>

Manipulation de listes

Files d'attente

Les listes peuvent servir de files d'attente simples.

<?php
// Ajout à la file
$redisClient->rpush('file:travaux', 'tache1');
$redisClient->rpush('file:travaux', 'tache2');

// Traitement FIFO
$tache = $redisClient->lpop('file:travaux');
echo "Traitement: $tache"; // tache1
?>

Ensembles et opérations

Ensembles uniques

Les ensembles garantissent l'unicité des éléments.

<?php
$redisClient->sadd('tags:article', 'php', 'redis', 'cache');
$redisClient->sadd('tags:article', 'php'); // Duplicat ignoré

$tags = $redisClient->smembers('tags:article');
print_r($tags); // ['php', 'redis', 'cache']
?>

Intersection d'ansembles

<?php
$redisClient->sadd('utilisateurs:actifs', 'u1', 'u2', 'u3');
$redisClient->sadd('utilisateurs:premium', 'u2', 'u3', 'u4');

$commun = $redisClient->sinter('utilisateurs:actifs', 'utilisateurs:premium');
print_r($commun); // ['u2', 'u3']
?>

Ensembles ordonnés

Scores et classements

Les ensembles ordonnés maintiennent les éléments triés par score.

<?php
$redisClient->zadd('classement:jeu', [
    'joueur1' => 2500,
    'joueur2' => 1800,
    'joueur3' => 3100
]);

$top = $redisClient->zrevrange('classement:jeu', 0, 2, true);
print_r($top); // ['joueur3' => 3100, 'joueur1' => 2500, 'joueur2' => 1800]
?>

Transactions

Exécution atomique

Les transactions garantissent l'exécution séquetnielle de commandes.

<?php
$redisClient->watch('solde:compte');
$solde = $redisClient->get('solde:compte');

if ($solde >= 100) {
    $redisClient->multi();
    $redisClient->decrby('solde:compte', 100);
    $redisClient->incr('transactions');
    $resultat = $redisClient->exec();
    
    if ($resultat) {
        echo "Transaction réussie";
    }
}
?>

Publication/Souscription

Messagerie simple

<?php
// Dans un script émetteur
$redisClient->publish('canal:alertes', 'Nouvelle mise à jour disponible');

// Dans un script récepteur (à exécuter séparément)
$redisClient->subscribe(['canal:alertes'], function ($redis, $canal, $message) {
    echo "Reçu sur $canal: $message\n";
});
?>

Surveillance et débogage

Informations serveur

<?php
$info = $redisClient->info();
echo "Version Redis: " . $info['redis_version'] . "\n";
echo "Clients connectés: " . $info['connected_clients'] . "\n";
?>

Journal des commandes lentes

<?php
$logs = $redisClient->slowlog('get', 5);
foreach ($logs as $entree) {
    echo "Commande: " . $entree[3] . " - Durée: " . $entree[2] . "μs\n";
}
?>

Étiquettes: Redis PHP Base_de_données_mémoire Cache devops

Publié le 29 septembre à 18h08