web-dev-qa-db-fra.com

Est-il recommandé de stocker PHP Sessions dans MemCache?

Je travaille avec quelques serveurs Web derrière un équilibreur de charge et je peux activer les sessions persistantes pour tenir un utilisateur sur les serveurs Web spécifiques - cela fonctionnera.

J'ai lu sur PHP Sessions & MemCache. Je dois dire que ce que j'ai lu est une touche déroutante car certaines pages disent que c'est une bonne idée et d'autres le contraire.

Des questions:

  1. est-il possible de garder des sessions php dans memcache?
  2. est-il préférable d'utiliser des sessions collantes sur memcache?
  3. quels sont les problèmes avec les sessions php dans memcache - note: je peux obtenir suffisamment de cache (Amazon donc son extensible).
50
Adam

1: OUI. Et je recommande fortement de stocker PHP sessions dans Memcached. Voici pourquoi:

Memcached est idéal pour stocker de petits morceaux de données auxquels la base de données et le système de fichiers accèdent fréquemment.

Memcached a été conçu spécifiquement pour les sessions. Il était à l'origine une idée originale du développeur principal de livejournal.com, et plus tard utilisé pour mettre également en cache le contenu des messages des utilisateurs. Le bénéfice est immédiat: l'essentiel de l'action se déroule en mémoire. Les temps de chargement des pages se sont considérablement améliorés.

Heureusement, PHP et Apache ont une implémentation facile pour gérer les sessions avec Memcached. Installez simplement avec quelques commandes Shell

exemple pour debian:

Sudo apt-get -t stable install php5-memcached

et

changez vos paramètres php.ini en quelque chose de similaire à:

(extrait de http://www.dotdeb.org/2008/08/25/storing-your-php-sessions-using-memcached/ )

 session.save_handler = memcache
 ; change server:port to fit your needs...
 session.save_path="tcp://server:port?persistent=1&weight=1&
timeout=1&retry_interval=15"

La clé est le session.save_path

Il ne pointera plus vers un chemin de fichier relatif sur votre serveur. APC a été mentionné - APC pour la mise en cache des fichiers .php utilisés par le programme. APC et Memcached réduiront considérablement IO et laisseront Apache libre de servir des ressources, telles que des images, plus rapidement.

2: Non

3: L'inconvénient fondamental de l'utilisation de Memcached est la volatilité des données

Les données de session ne sont pas persistantes dans Memcached. Donc, si et quand le serveur tombe en panne, toutes les données en mémoire sont perdues. Tout le monde devra se reconnecter.

Et puis vous avez la consommation de mémoire ...

N'oubliez pas: les sessions sont stockées dans la mémoire. Si votre site Web gère un grand nombre d'utilisateurs simultanés, vous devrez peut-être débourser un peu d'argent supplémentaire pour une allocation de mémoire plus importante.

62
FredTheWebGuy

1. Oui, il est possible de conserver PHP sessions dans memcached.

L'extension memcache est même livrée avec un gestionnaire de session qui prend très peu de configuration pour être opérationnel. http://php.net/manual/en/memcached.sessions.php

2. Memcache/Sticky Sessions

Je ne sais pas vraiment ce qui est "mieux". Je pense que ça va être une de ces réponses "ça dépend". Cela dépend probablement de vos raisons d'équilibrer la charge. Si un petit nombre d'utilisateurs cause beaucoup de charge chacun, ou si c'est un grand nombre provoquant une petite charge chacun.

3. Contre Memcache

Il y a probablement 2 inconvénients principaux à utiliser memcache pour le stockage des sessions.

Premièrement, il est volatil. Cela signifie que si une de vos instances memcached est redémarrée/plante etc. toutes les sessions stockées dans cette instance sont perdues. Bien que s'ils utilisaient des sessions traditionnelles basées sur des fichiers, ils seront toujours là lorsque le serveur reviendra.

Deuxièmement et probablement plus pertinent, memcached ne garantit pas la persistance, il est uniquement destiné à être un cache. Les données peuvent être purgées de memcached à tout moment, pour n'importe quelle raison. Alors qu'en réalité, les seules raisons pour lesquelles les données doivent être purgées sont si le cache approche de ses limites de taille. Les données les moins récemment consultées seront supprimées. Encore une fois, cela pourrait ne pas être un problème, car l'utilisateur est probablement parti si sa session est obsolète, mais cela dépend de vos besoins.

7
Brenton Alker

Si vous souhaitez utiliser l'extension "memcacheD" et non "memcache" (il existe deux extensions différentes) pour le contrôle de session, vous devez faire attention à modifier php.ini .

La plupart des ressources Web de Google sont basées sur memcache car c'est une version antérieure à memcacheD. Ils diront ce qui suit:

session.save_handler = memcache session.save_path = "tcp: // localhost: 11211"

Mais ce n'est pas valable en ce qui concerne memcacheD.

Vous devez modifier php.ini comme ça:

session.save_handler = memcached session.save_path = "localhost: 11211"

Il n'y a aucun identificateur de protocole.

De: http://php.net/manual/en/memcached.sessions.php#99646

4
ribluc

Comme mon point de vue, il n'est pas recommandé de stocker des sessions dans Memcached.Si une session disparaît, souvent l'utilisateur est déconnecté, si une partie d'un cache disparaît ou en raison d'un crash matériel, cela ne devrait pas causer de douleur notable à vos utilisateurs. le site memcached, "memcached est un système de mise en cache d'objets de mémoire distribuée hautes performances, de nature générique, mais destiné à être utilisé pour accélérer les applications Web dynamiques en allégeant la charge de la base de données". Ainsi, lors du développement de votre application, n'oubliez pas que vous devez mécanisme de secours pour récupérer les données une fois qu'elles ne sont pas trouvées sur le serveur Memcached.

2
indika