Memcache est un serveur de cache qui utilise la mémoire vive du serveur pour stocker ses données. Ce mode de stockage garantit des temps de lecture très inférieurs au système traditionnel cd cache de fichiers.

Memcached et eAccelerator peuvent fonctionner ensemble sans aucun problème.

  • Memcached met en cache les résultats et diverses variables de php.
  • eAccelerator optimise le code PHP.

Url du site officiel : http://memcached.org/

Pré-requis :

  • libevent
  • libevent-dev

Téléchargement :

Vous le trouverez ici : http://memcached.org/ Les versions plus ancienne ici : http://code.google.com/p/memcached/downloads/list

cd /opt/SOURCES/
curl -0 http://memcached.googlecode.com/files/memcached-1.4.4.tar.gz
tar xvzf memcached-1.4.5.tar.gz 
cd memcached-1.4.5

Installation :

J'ai rencontré un souci avec le make qui me faisait des erreurs du type :

[...]
/usr/include/netinet/in.h:136:2: error: invalid preprocessing directive #typedef
/usr/include/netinet/in.h:137:2: error: invalid preprocessing directive #struct
/usr/include/netinet/in.h:138:4: error: invalid preprocessing directive #{
[...]
/usr/include/arpa/inet.h:78: error: expected ‘)’ before ‘__net’
make[2]: *** [memcached-memcached.o] Error 1
make[2]: Leaving directory `/opt/SOURCES/memcached-1.4.4'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/opt/SOURCES/memcached-1.4.4'
make: *** [all] Error 2

J'ai donc du faire :

rpm -qf /usr/include/netinet/in.h
rpm -e --nodeps glibc-headers
yum install glibc-headers

Car le fichier : /usr/include/netinet/in.h avait été modifié et embêtait notre ami Memcached.

mkdir /opt/memcached145
./configure --prefix=/opt/memcached145
make
make install

Lancement de Memcached :

Procédez comme ceci :

cd /opt/memcached145/bin
./memcached -d -m 16 -u nobody -l 127.0.0.1 -p 11211

Vérification :

netstat -ntlp | grep memcached
tcp        0      0 127.0.0.1:11211             0.0.0.0:*                   LISTEN      17701/memcached

Il est bien lancé, poursuivons...

Intégration à PHP :

Vous pouvez le faire avec :

pecl install memcache

Ou manuellement :

cd /usr/local/src
curl -O http://pecl.php.net/get/memcache
tar zxvf memcache*
cd memcache-*
phpize
./configure
make
make test 
make install

Compilez avec cette ligne si vous avez comme moi un php compilé à la main :

./configure --enable-memcache --enable-debug --with-php-config=/opt/php5212/bin/phpize --with-php-config=/opt/php5212/bin/php-config --disable-docs --enable-64bit

Arrivez la vous devez modifier votre fichier php.ini:

Pour y intégrer ceci :

extension=memcache.so

moi j'ai du mettre :

extension=/opt/php5210/lib/php/extensions/no-debug-non-zts-20060613/memcache.so

Redémarrez votre apache :

service httpd stop
service httpd start

et vérifiez avec un phpinfo que Memcache focntionne bien.

ou plus simple :

php -r "phpinfo();" | grep memcache

Vous devriez avoir quelque chose comme ça :

memcache
memcache support => enabled
memcache.allow_failover => 1 => 1
memcache.chunk_size => 8192 => 8192
memcache.default_port => 11211 => 11211
memcache.default_timeout_ms => 1000 => 1000
memcache.hash_function => crc32 => crc32
memcache.hash_strategy => standard => standard
memcache.max_failover_attempts => 20 => 20
Registered save handlers => files user sqlite memcache

Voila votre premier rencontre avec Memcached est finie :)

Autre test pour vérifier que memcache fonctionne bien :

Créer un fichier test-memcache.php avec le contenu suivant mettez le dans votre /var/www d'apache et afficher le dans votre navigateur :

?php
// nouvelle objet Memcache
$objMem = new Memcache;
$objMem->connect('localhost', 11211) or die ('Connexion impossible!');

// retour la version du serveur Memcached
$strVersion = $objMem->getVersion();
echo 'Version du serveur: '.$strVersion.'';
echo "<br />";

$arrValue = array('val_str' => 'ma variable', 'val_int' =>587439);

$objMem->set('montableau', $arrValue, false, 60) or die ('Impossible de sauvegarder les données');
echo 'Stockage des donnees dans le cache (expire dans 60 seconds)';
echo "<br />";

$arrResult = $objMem->get('montableau');
echo 'Donnees venant du cache:';
echo "<br />";

// affichage de la variable
var_dump($arrResult);
?>

Dans les sources, plus précisément dans le repertoire scripts vous trouverez un script d'init et un script perl memcached-tool qui permet de monitorer memcached.

Si vous voyez des différences de performances sur vos sites après installation de la chose faites nous signe, merci.