2013

Gérer les sessions PHP avec Memcached

Il est possible d'optimiser les performances en stockant les sessions en mémoire à l'aide de 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.

Avantages

  • 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.

Inconvénients et limitations

  • 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.

PHP

Memcache

Le module Memcache fournit une interface procédurale maniable ainsi qu'orientée objet à Memcache, un démon fortement efficace dans la gestion du cache, qui est principalement destiné à faire baisser la charge des bases de données dans les applications web dynamiques.

Le module Memcache fournit également un gestionnaire de session (memcache).

Cette extension PECL n'est pas intégrée à PHP.

Utilisation basique

Avec plusieurs serveur et redondance (Memcached for Load Balancing Sessions, Memcached session redundancy on Multiple Memcached Servers), visitez :

Donc l'essentiel du php.ini :

[Session]
; Handler used to store/retrieve data.
; http://php.net/session.save-handler
; On indique à php de gérer les sessions dans memcache au lieu des fichiers locaux par défaut
;session.save_handler = files
session.save_handler = memcache
;session.save_handler = memcached

; le save_path est composé des adresses des 2 serveurs séparées par une virgule
session.save_path = "memcache.serveurA:11211,memcache.serveurB:11211";

; After this number of seconds, stored data will be seen as 'garbage' and
; cleaned up by the garbage collection process.
; http://php.net/session.gc-maxlifetime
;session.gc_maxlifetime = 1440
;session.gc_maxlifetime = 28800
session.gc_maxlifetime = 2592000

[memcache]
memcache.allow_failover=1
memcache.session_redundancy=3

Memcached

memcached est un système à haute performance, distribué et en mémoire, de cache d'objet, générique par nature, mais principalement destiné à l'utilisation avec des sites Web dynamiques, pour soulager les bases de données.

Cette extension utilise la bibliothèque libmemcached pour assurer les communications avec les serveurs memcached. Elle fournit aussi un gestionnaire de sessions, appelé memcached.

Cette extension requiert la bibliothèque cliente libmemcached. Pour un support de l'authentification SASL, la bibliothèque libmemcached doit avoir été compilée avec l'activation de SASL.

Le support du gestionnaire de sessions est activé par défaut. Pour le désactiver, utilisez --disable-memcached-session.

Support des sessions

Memcached fournit un gestionnaire de sessions qui peut être utilisé pour stocker les sessions sur memcache. Une instance distincte de memcached est utilisé en interne, ce qui fait que vous pouvez avoir un pool de serveur différent, si nécessaire.

  • session.save_handler : Donnez-lui la valeur de memcached pour activer le support des sessions sur memcached.
  • session.save_path : Définit une liste de valeurs séparés par des virgules, avec la syntaxe nomdhote:port, à utiliser pour le pool de serveurs de sessions. Par exemple, "sess1:11211, sess2:11211".

Gestion des sessions

Le support des sessions de PHP est un moyen de préserver des données entre plusieurs accès. Cela vous permet de créer des applications personnalisées, et d'augmenter l'attrait de votre site.

Chaque visiteur accédant à votre page web se voit assigner un identifiant unique, appelé "identifiant de session".

For saving sessions, file handler seems to be very effective for most setups, except those situations:

  • if performance is an issue, the directory which stores session files can be mounted as tmpfs (ram disk).
  • if sharing sessions across multiple webservers is needed (in clustered environments), use memcache for storing session information (tip: you can setup more than one instance of memcache eliminate single point of failure). This method, however, sets a limitation of session size to 64k (this should be enough for most applications)
  • don't use NFS for sharing session files between webservers, it does not handle locking correctly and can cause corruption of session data.

2011

Speed up your sessions

Speed up your sessions, part 1 – Best practices

The session must be used to store data concerning an authenticated user. You should not use it as a data cache.

Speed up your sessions, part 2 – Performance

SQLite : fast read / slow write

SQLite for handling sessions is used to improve significantly read accesses. On the other hand, write processing will be slown and time-consuming.

Memcached : fast but RAM consuming

If frequently used data are put in RAM, a lot of disk reads and writes will be saved.

Revisiting Faster PHP Sessions

  • Make Session Dir Live in RAM (tmpfs)
  • Decentralizing

2010

Redis PHP Introduction

2008

Enhance PHP session management

  • Session sharing in web clusters
  • Sessions in Database
  • Memcache

DotDeb.org

memcached

(2008) Storing your PHP sessions using memcached

Using PHP sessions can be a problem when your PHP applications are load-balanced on many web servers. You can store them on a NFS export or recode the session_set_save_handler using a SQL backend for example. But there is no solution more efficient, more scalable, more performant and easier to deploy than using memcached…