Gérer les sessions PHP avec Memcached
Par défaut, les sessions PHP sont stockées sur le système de fichier (dans /var/lib/php5, ou dans /tmp). Si les sites Internet hébergés font une utilisation intensive des sessions, cela entraîne un délai supplémentaire dans l'exécution des requêtes PHP. Il est possible d'optimiser les performances en stockant les sessions en mémoire à l'aide de Memcached. Ce guide décrit la mise en place de ce système.
Ce guide est testé sur:
- Debian 6.0 Squeeze
Prérequis
Ce guide nécessite:
- une installation fonctionnelle de PHP, telle que décrite par Installer PHP-FPM sur Debian.
- un serveur Memcached, comme décrit par Installer Memcached sur Debian.
Avantages et Inconvénients
Inconvénients
L'utilisation de Memcached pour stocker les sessions impose les limitations suivantes:
- Les sessions stockées ne peuvent dépasser une taille de 1 Mo.
- Les sessions ne sont pas persistantes, et un redémarrage du démon Memcached les supprime.
- Il est impossible de contrôler la durée des sessions.
- Le nombre de sessions gérées est limitées par la taille du cache Memcached.
N'utilisez pas Memcached pour gérer les sessions PHP si celles-ci doivent contenir des informations critiques (dans le cas d'un site E-commerce par exemple).
Avantages
Utiliser Memcached pour stocker les sessions apporte les avantages suivants:
- L'accès aux données de session est Très rapide, car elle sont stockées en mémoire.
- Il n'y a pas à gérer un mécanisme de suppression des sessions périmées, Memcached s'en charge.
- Dans les limites de la mémoire assignée à Memcached, le système peut gérer facilement plusieurs dizaines de milliers de connexions simultanées.
Paramètres
Renseignez l'adresse IP du serveur Memcached:
MEMCACHED_IP="127.0.0.1"
Renseignez le port du serveur Memcached:
MEMCACHED_PORT="11211"
Installation
Installez le module PHP5 pour Memcache:
command apt-get install php5-memcached
Remarque: De nombreux guides disponibles sur Internet utilisent php5-memcache plutôt que php5-memcached. php5-memcached est recommandé, car plus récent et disposant de plus de fonctionnalités.
Configurez PHP5 pour stocker les sessions dans le serveur Memcached:
command echo "; Storing session in memcached server.
session.save_handler = memcached
session.save_path=\"${MEMCACHED_IP}:${MEMCACHED_PORT}\"" \
> '/etc/php5/conf.d/sessions-store-memcached.ini'
Rechargez la configuration de PHP selon la méthode d'installation utilisée:
test -x /etc/init.d/php5-fpm && /etc/init.d/php5-fpm force-reload
test -x /etc/init.d/apache2 && /etc/init.d/apache2 force-reload
test -x /etc/init.d/lighttpd && /etc/init.d/lighttpd force-reload
test -x /etc/init.d/nginx && /etc/init.d/nginx force-reload
Remerciements
- Merci à Hio.fr (fr) pour PHP session avec memcached (fr).
- Merci à Artur Ejsmont (en) pour PHP session in Mysql VS Memcached (en).