Utiliser Memcached pour la mise en cache de données PHP dans ServBay
ServBay, en tant qu’environnement de développement Web local puissant, intègre en standard le serveur performant Memcached ainsi que l’extension PHP associée. Cela facilite pour les développeurs l’implémentation d’une mise en cache efficace des données dans leurs applications PHP et améliore ainsi notablement les performances.
Ce guide explique en détail comment vérifier et exploiter Memcached et son extension PHP correspondante dans ServBay.
Présentation de Memcached
Memcached est un système de cache d’objets en mémoire distribué à haute performance. En stockant temporairement des données en mémoire (par exemple les résultats de requêtes SQL, réponses d’API, fragments de pages Web, etc.), Memcached réduit significativement le nombre d’accès à la base de données ou à d’autres stockages de données backend, ce qui accélère le temps de réponse des applications Web dynamiques et augmente leur capacité de traitement.
Principales caractéristiques
- Hautes performances : Les données sont stockées en mémoire, ce qui permet des lectures et écritures ultra-rapides.
- Distribution : Permet de constituer facilement un pool de cache réparti sur plusieurs serveurs.
- Simplicité d’utilisation : Protocole simple, nombreuses bibliothèques clientes, intégration aisée.
- Allègement de la charge de la base de données : Réduit efficacement la charge sur la base de données, notamment en cas de trafic élevé.
Différences entre les extensions PHP memcache
et memcached
Dans PHP, deux extensions sont couramment utilisées pour se connecter à un serveur Memcached : memcache
et memcached
. Même si leurs noms se ressemblent, ce sont deux extensions distinctes proposant des API et fonctionnalités différentes :
Extension
memcache
:- Extension PHP plus ancienne.
- Fournit surtout une API procédurale (
memcache_connect()
,memcache_set()
, etc.). - Fonctions de base, support limité pour certaines fonctionnalités avancées (comme le hashing cohérent, bien que cela soit parfois implémenté côté client).
Extension
memcached
:- Extension PHP plus récente (s’appuie sur la bibliothèque libmemcached).
- Met à disposition une API orientée objet (classe
Memcached
). - Supporte de nombreuses fonctionnalités avancées : hashing cohérent, protocole binaire, authentification SASL, options de sérialisation souples, etc.
- Il est généralement recommandé d’utiliser l’extension
memcached
pour sa robustesse et son développement actif.
Par défaut, ServBay propose et recommande l’utilisation de l’extension PHP memcached
, plus riche en fonctionnalités.
Serveur Memcached et extension PHP dans ServBay
ServBay intègre non seulement le serveur Memcached (en tant que package gérable), mais aussi l’extension PHP memcached
préinstallée et activée par défaut pour toutes les versions de PHP fournies.
Cela signifie qu’après installation de ServBay, le serveur Memcached ainsi que son extension PHP sont prêts à l’emploi, sans besoin de compilation ou de configuration supplémentaire.
Vérifier l’état du serveur Memcached :
Vous pouvez vérifier le statut du package Memcached
via l’interface principale ou la gestion des packages dans ServBay, et vous assurer qu’il soit « en cours d’exécution ». Si ce n’est pas le cas, essayez de le démarrer.
Vérifier le chargement de l’extension PHP memcached
:
Pour confirmer que l’extension memcached
est bien chargée pour votre version de PHP, la méthode la plus simple consiste à utiliser la fonction phpinfo()
:
Créez un fichier PHP (par exemple
info.php
) dans le répertoire racine de votre site ServBay (par défaut/Applications/ServBay/www
).Ajoutez le contenu suivant dans ce fichier :
php<?php phpinfo(); ?>
1
2
3Accédez à ce fichier depuis le site local configuré avec ServBay (par exemple, si votre domaine est
servbay.demo
, visitezhttp://servbay.demo/info.php
).Sur la page phpinfo, recherchez "memcached". Si une section « memcached » apparaît avec les informations de configuration et le numéro de version, l’extension est bien active et fonctionnelle.
Utiliser Memcached dans du code PHP
Dès lors que le serveur Memcached est en fonctionnement et que l’extension PHP memcached
est chargée, vous pouvez exploiter la classe Memcached
dans votre application pour établir la connexion et effectuer des opérations de mise en cache.
Par défaut, le serveur Memcached écoute sur localhost
(127.0.0.1) et le port standard 11211
.
Exemple de code
Voici un exemple simple de code PHP illustrant l’utilisation de la classe Memcached
pour se connecter localement au serveur Memcached, stocker et récupérer des données :
Enregistrez ce code sous un fichier PHP dans le répertoire du site ServBay (par exemple /Applications/ServBay/www/memcached_test.php
) :
<?php
// Informations du serveur Memcached
$memcached_host = 'localhost';
$memcached_port = 11211;
// Création d'une instance du client Memcached
$memcached = new Memcached();
// Ajout du serveur Memcached au pool de connexions du client
// La méthode addServer() retourne un booléen indiquant si l'ajout a réussi, sans garantir la connexion effective
if (!$memcached->addServer($memcached_host, $memcached_port)) {
// Remarque : un échec d'addServer est généralement un problème de configuration, pas de connexion au serveur
die("Impossible d'ajouter le serveur Memcached à la liste des connexions du client. Veuillez vérifier l'hôte et le port.");
}
// Test de connexion avec une clé inexistante (optionnel mais conseillé)
// get() renvoie false ou un tableau vide si la clé est absente ou en cas de souci de connexion
// Memcached::getResultCode() permet d'obtenir un code d'état plus précis
$test_key = 'servbay_memcached_connection_test';
$memcached->get($test_key); // Test avec une clé inexistante
$result_code = $memcached->getResultCode();
if ($result_code !== Memcached::RES_NOTFOUND && $result_code !== Memcached::RES_SUCCESS) {
// Si ce n'est ni RES_NOTFOUND ni RES_SUCCESS : problème possible de connexion
// RES_SUCCESS peut aussi indiquer une récupération de valeur vide
// Un contrôle de connexion plus rigoureux peut exiger une logique supplémentaire selon le client utilisé
// En développement local, si addServer réussit et que les opérations suivantes sont sans erreur, la connexion est réputée valide
echo "Attention : un problème pourrait être survenu lors de la connexion au serveur Memcached. Code résultat : " . $result_code . "<br>";
// Pour une application en production, prévoir une gestion d’erreurs plus détaillée
} else {
echo "Connexion réussie au serveur Memcached ({$memcached_host}:{$memcached_port}).<br>";
}
// --- Exemples d'opérations de cache ---
// Données à mettre en cache
$key = 'user_profile_1234';
$data = [
'id' => 1234,
'username' => 'servbay-demo',
'email' => '[email protected]',
'status' => 'active'
];
$expiration = 3600; // Durée d'expiration (en secondes ; ici 1 heure)
// Mise en cache des données
// La méthode set() retourne true en cas de succès
if ($memcached->set($key, $data, $expiration)) {
echo "Les données ont été mises en cache sous la clé '{$key}' pour {$expiration} secondes.<br>";
} else {
echo "Échec de la mise en cache des données !<br>";
// Utilisez $memcached->getResultCode() pour comprendre l’échec
echo "Code résultat : " . $memcached->getResultCode() . "<br>";
}
// Lecture des données en cache
echo "Lecture des données depuis le cache…<br>";
$cachedData = $memcached->get($key);
if ($cachedData !== false) { // Memcached::get() retourne false si absence dans le cache ou erreur
echo "Données récupérées depuis le cache :<br>";
echo "<pre>";
print_r($cachedData);
echo "</pre>";
} else {
echo "Échec ou absence des données dans le cache (clé '{$key}').<br>";
echo "Code résultat : " . $memcached->getResultCode() . "<br>";
}
// Simulation d’expiration du cache (supposons qu’un délai soit écoulé)
// Habituellement, dans une application réelle, si $cachedData vaut false, on recharge depuis la source d’origine (base de données…) puis on recache.
// Exemple : suppression d’une donnée du cache
/*
echo "Suppression de la donnée du cache…<br>";
if ($memcached->delete($key)) {
echo "La donnée a été supprimée du cache pour la clé '{$key}'.<br>";
} else {
echo "Échec de la suppression du cache !<br>";
echo "Code résultat : " . $memcached->getResultCode() . "<br>";
}
// Tentative de lecture après suppression
echo "Nouvelle tentative de lecture après suppression…<br>";
$cachedDataAfterDelete = $memcached->get($key);
if ($cachedDataAfterDelete !== false) {
echo "Donnée retrouvée (suppression échouée) :<br>";
print_r($cachedDataAfterDelete);
} else {
echo "Donnée absente du cache (suppression réussie attendue).<br>";
echo "Code résultat : " . $memcached->getResultCode() . "<br>";
}
*/
// Exemple : vidage complet du cache (utiliser avec précaution !)
/*
echo "Vidange totale du cache…<br>";
if ($memcached->flush()) {
echo "Le cache a été vidé.<br>";
} else {
echo "Échec du vidage du cache !<br>";
echo "Code résultat : " . $memcached->getResultCode() . "<br>";
}
*/
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
Accédez au fichier memcached_test.php
via votre site local ServBay pour visualiser l’état de la connexion et les résultats des opérations de cache.
Points d’attention
- Vérifiez que le package Memcached de ServBay tourne bien.
- Par défaut, Memcached écoute sur
127.0.0.1
(oulocalhost
) et le port11211
. Ces paramètres conviennent généralement. - En cas d’échec de connexion côté PHP, contrôlez l’état du package Memcached et assurez-vous qu’aucun pare-feu ne bloque les connexions locales.
- La méthode
addServer
de la classeMemcached
ajoute simplement un serveur à la liste d’attente de connexion, sans vérifier la disponibilité en temps réel. La connexion réelle a lieu lors de l’appel aux méthodesget
,set
, etc. Pour savoir si tout fonctionne, contrôlez les valeurs de retour ou le code obtenu viagetResultCode()
.
Conclusion
ServBay offre un moyen extrêmement pratique d’exploiter Memcached. Grâce à l’intégration directe du serveur Memcached et de son extension PHP préinstallée et activée par défaut, vous bénéficiez instantanément de la puissance de la mise en cache en local, sans installation ni configuration complexe. Un atout majeur pour développer des applications PHP à haute performance sur votre poste de travail.