Utilisation de memcached sous Windows avec WampServer

    17:00 8 09 2009

J’entends déjà : « Pourquoi utiliser memcached sous windows? C’est pas fait pour la prod. Windows! ».

Ok, ok, mais dites moi? Comment je vais faire pour développer mon appli qui utilise memcached avec mon WampServer préféré si je ne peux pas la tester?

Avant de rentrer dans le détail, voyons un peu ce qu’est memcached.

Memcached est un serveur de mémoire partagé développé par Danga Interactive permettant de mettre des objets de toute sorte en cache.

Pour simplifier, à partir d’un script PHP, vous allez pouvoir mettre des variables en mémoire et donc rendre ces variables persistantes et accessibles à tous vos autres scripts PHP. Vous pouvez bien sûr déjà faire cela avec d’autres extensions telle que APC qui vous offre une solution de mémoire partagée. Sauf qu’avec APC, votre mémoire partagée ne sera accessible que depuis votre serveur local.
Memcached sera accessible à toutes les machines de votre environnement de production et leur permettra ainsi de partager la même mémoire et donc le même cache.

Toujours pas convaincu de l’intérêt ou ca reste pas très clair?

Et bien prenons un exemple.

Vous avez développé un site international de vente en ligne de Bandanas. Vous avez une centaine de références. Le site marche pas mal, vous êtes seul sur votre marché (qui penserait à vendre des bandanas sur internet?), quelques centaines de milliers de visiteurs par jour, tout va bien. Pour gérer la charge, vous avez une infrastructure avec deux serveurs en front et un serveur de bases de données.

C’est alors que Madonna décide de relancer la mode des bandanas en en portant un dans son dernier clip. Britney et Rihanna (ca doit s’écrire comme ca) suivent, la mode prend, tout le monde veut son bandana pour se l’attacher autour du bras ou de la jambe (la classe hein…rigolez pas, ca pourrait arriver)!

Le trafic de votre site explose, votre module permettant d’ajouter des commentaires sur les articles est pris d’assaut, pour gérer la charge, vous ajoutez 3 serveurs supplémentaires.
Ca permet au site de souffler un peu mais vous vous rendez rapidement compte que cela ne suffit pas!

Vous faites donc du profiling sur votre code pour optimiser les performances de votre site et vous rendez compte que c’est la base de données qui pose problème. Trop de connexions, requêtes trop lentes, etc…mais vous ne pouvez pas vous en passer, les pages du site évoluent rapidement avec les commentaires, l’affichage du stock disponible, etc… et vous vous devez d’avoir des pages à jour.
Vous faites le calcul, 10 000 000 de pages du catalogue vues par heure, soit 100 000 pour chaque produit (100 produits) et au moins autant de requêtes sur la base.

Et c’est là qu’intervient memcached. Grâce à memcached, vous allez pouvoir mettre les informations sur les produits en cache dans votre mémoire partagée pour une durée prédéfinie, par exemple, 1 minute et ces informations seront accessibles à vos 5 frontaux sans avoir à faire de requête sur votre base de données.

Ainsi, en une heure et pour un produit donné, vous n’aurez plus que 60 requêtes (1 heure = 60 * 1 minute) pour afficher la page du produit en question et des temps de réponse bien meilleurs (la mémoire est bien plus rapide que la base de données).

Vous serez donc passé de 100 000 requêtes par heure à 60! La contrepartie est que vos pages ne seront mises à jour que toutes les minutes.

Bien sûr, ceci n’est qu’un exemple d’utilisation de memcached, cette solution peut s’avérer utile dans bien d’autres cas (le plus connu étant le partage des fichiers de session sur une architecture avec répartition de charge).

ALORS COMMENT ON L’UTILISE?

La première étape va consister à installer notre serveur memcached. Plusieurs portages de memcached sur Windows existent sur le net, personnellement je vais utiliser une version beta mais plutôt à jour qui fonctionne bien et que vous pourrez trouver sur ce site : http://splinedancer.com/memcached-win32/.

Donc téléchargez les binaires (sous la forme d’un fichier zip), décompressez les et mettez le tout dans un répertoire « c:\memcached » sur votre machine.

Vous devriez maintenant avoir :

c:\memcached\memcached.exe

Vous allez avoir deux façons de le lancer.

Sous la forme d’un service :
c:\memcached\memcached.exe -d install
c:\memcached\memcached.exe -d start

Ou ponctuellement en double cliquant dessus.

Maintenant que notre serveur est lancé, nous allons pouvoir l’attaquer à partir de PHP.

Pour cela nous devons commencer par installer et activer l’extension php_memcache.dll.

Si vous utilisez WampServer avec une version de PHP < 5.3.0, l'extension est fournie par défaut (elle fait partie de PECL). Si vous utilisez PHP 5.3.0 ou supérieur, il vous faudra télécharger l'extension à cette adresse : http://downloads.php.net/pierre/ Activez l'extension via le menu de WampServer ou en modifiant votre fichier php.ini et le tour est joué. Vous allez maintenant pouvoir lire et écrire dans memcached. Sur votre serveur local : < ?php // on se connecte $memcache = new Memcache(); $memcache->connect(‘localhost’, 11211) or die (‘impossible de se connecter’);
//on écrit avec une validité de 10 secondes
$test = ‘du texte’;
$memcache->set(‘test’, $test, False, 10) or die (‘echec sur ecriture’);
//on lit
echo $memcache->get(‘test’);
?>

Maintenant essayez le script ci-dessous sur un autre serveur de votre réseau local en remplaçant XXX.XXX.XXX.XXX par l’adresse IP de votre premier serveur :

< ?php // on se connecte $memcache = new Memcache(); $memcache->connect('XXX.XXX.XXX.XXX', 11211) or die ('impossible de se connecter');
//on lit
echo $memcache->get('test');
?>

Si vous avez exécuté le premier script moins de 10 secondes avant le deuxième, vous verrez le contenu de la variable s’afficher. Au bout de 10 secondes, la variable n’est plus bonne, vous ne pourrez donc plus y accéder.

ET APRES?

Ces exemples sont très pauvres et intentionnellement simplifiés (memcache permet de gérer des pools de serveurs, être utilisé comme gestionnaire de sessions, gérer la compression, etc…) mais quoi qu’il en soit, l’utilisation de memcache est très simple et se limite à une vingtaine de méthodes.

si vous voulez plus d’infos sur l’utilisation de memcache, consultez la doc de PHP


Actions

Informations

7 réponses à “Utilisation de memcached sous Windows avec WampServer”

8 09 2009
Damien (17:24:29) :

[Troll]
Pourquoi utiliser windows ? C’est pas fait pour développer windows
[/Troll]

8 09 2009
Roms (17:26:11) :

héhé!

9 09 2009
Kamelot Blog (00:11:04) :

Utilisation de memcached sous vista avec wampserver…

Petite précision pour les utilisateurs de vista.

* Dans l’explorateur de fichier, clic droit sur memcached.exe
* Aller dans les propriétés
* Onglet Compatibilité.
* Cochez « Executer ce programme en tant qu’Administrateur »…

9 09 2009
Anthony (16:22:41) :

Juste pour information, je ne m’étais jamais penché sur Memcached et je me suis donc posé la question concernant Linux.

Il y a un message ici concernant l’installation de Memcached sous Linux :
http://fr.php.net/manual/fr/memcache.installation.php

25 09 2009
Php conception (22:48:44) :

Merci de partager ces infos je crois avoir deja un environnement qui permet entre autres de créer des applications realisée avec php qui epuvent tourner sur windows sous forme d application j ai fait des essais avec mé pour vous dire le resultat n etait pas fameux.

15 10 2009
bud86 (15:43:14) :

au fait merci pour les compiles de wamp avec PHP 5.2.10 et 5.2.11.

@+ peut être chez anaska et surement sur la toile avant ;-)

10 05 2012
steve (17:31:37) :

Tip Top !
Grand merci