Comment stocker les sessions PHP en Cache APC?
Stocker les sessions dans le disque très lente et douloureuse pour moi. Je vais avoir très haut trafic. Je veux stocker session Avancée dans le Cache PHP, comment puis-je faire cela?
- ...on dirait que votre "stratégie" à voter pour aucun motif n'a pas fonctionné...
- ... bien sûr, je veux dire ne fonctionne pas pour vous.
- La préférence pour l'utilisation de memcached pour personnalisé session de la manipulation au cours de l'APC est dû au fait de l'APC n'a pas d'échelle sur plusieurs machines.
- Que et le pecl paquet pour memcache est livré avec un gestionnaire de session personnalisé écrit.
- Meilleure question est: "où dois-je conserver mes séances". L'APC n'est pas un bon endroit. Si vous êtes l'obtention d'un tel trafic élevé, alors vous devrez avoir une TONNE de mémoire, utilisation très courte durée de session, ou être ok avec beaucoup de sessions se expulsées et votre APC cache d'opcode soudainement devenir défectueux. Votre stockage de session n'est PAS votre goulot d'étranglement des performances. Keep it simple et de garder les sessions sur le disque, sauf si vous avez un environnement en clusters (alors utiliser MongoDb, Redis ou memcached).
Vous devez vous connecter pour publier un commentaire.
J'ai essayé d'attirer des réponses de meilleure qualité en offrant 100 points comme une prime, mais aucune des réponses ont été très satisfaisants.
Je voudrais regrouper les solutions recommandées comme ceci:
À l'aide de l'APC en tant que stockage de session
APC ne peut pas vraiment être utilisé comme une session de magasin, car il n'existe aucun mécanisme permettant à l'APC qui permet de blocage, Mais ce blocage est essentiel de s'assurer que personne ne modifie les d'abord lire les données de session avant de l'écrire.
Ligne de fond: l'Éviter, il ne fonctionnera pas.
Alternatives
Un certain nombre de gestionnaires de session peuvent être disponibles. Vérifiez la sortie de la
phpinfo()
à laSession
section "Enregistré gestionnaires de sauvegarde".De stockage de fichiers sur le disque RAM
Fonctionne out-of-the-box, mais a besoin d'un système de fichiers monté en tant que disque RAM pour des raisons évidentes.
De mémoire partagée (mm)
Est disponible lorsque PHP est compilé avec
mm
activé. C'est builtin sur windows.Memcache(d)
PHP est livré avec une session dédiée gestionnaire de sauvegarde pour cela. Nécessite installé memcache serveur et client PHP. En fonction des deux memcache extensions est installé, le gestionnaire de sauvegarde est soit disant
memcache
oumemcached
.open()
fonction n'est pas encore obtenir l'id de session. Donc, il n'y a pas de verrou par id de session: mauvaise chose.read()
et déverrouille enwrite()
.open()
juste initialise le tableau. Et oui, il a été testé et est en cours d'utilisation.En théorie, vous devriez être en mesure d'écrire un gestionnaire de session personnalisé qui utilise APC pour ce faire de façon transparente pour vous. Cependant, je n'ai pas été en mesure de trouver quelque chose de vraiment prometteur dans un rapide de cinq minutes de recherche, la plupart des gens semblent être à l'aide de l'APC pour le bytecode de cache et de mettre leurs sessions de memcached.
ini_set('session.save_handler', 'memcache')
(sinon memcached, sqlite ou des fichiers, sauf si d'autres extensions PHP ne fournissent plus).Tout simplement mettre votre /tmp disque (ou, où que PHP les fichiers de session sont stockés) sur un disque RAM comme
tmpfs
ouramfs
serait également de sérieux gains de performance, et serait beaucoup plus transparent interrupteur, avec zéro modifications de code.Le gain de performance peut être moins importante, mais il sera toujours beaucoup plus rapide que le disque sessions.
Les stockons dans les cookies (crypté) ou MongoDB. L'APC n'est pas vraiment prévu à cet effet.
Vous pouvez stocker vos données de session en PHP internals de mémoire partagée.
Mais il doit être disponible: http://php.net/manual/en/session.installation.php
Une autre bonne solution est de stocker les sessions PHP dans memcached
session.save_handler = memcache
Explicite de la Session de Clôture, immédiatement après la Session de Départ, de l'Ouverture et de l'Écriture devrait résoudre le problème de verrouillage dans Unirgy Réponse(où l'accès à la session est toujours cyclique(démarrer/open-écrire-fermer). J'Imagine aussi une Deuxième classe - APC_journaling ou quelque chose de similaire utilisé en conjonction avec les Sessions aurait finalement mieux.... Une session commence et est écrit avec un unique Id externe attribué à chaque session, que la session est fermée, et un journal (tableau en cache apc via _store & _add) est ouvert/créé pour tout autre écrit destiné à aller à la session qui peut ensuite être lu, validé et écrite de la session(identifié par l'id unique!) dans les apc à la prochaine occasion favorable.
J'ai trouvé un bon billet de blog Expliquant que le Verrouillage des ravages Sven se réfère à vient de la Session de blocage jusqu'à ce qu'elle soit fermée ou de l'exécution du script se termine. La séance immédiatement fermé n'empêche pas la lecture de l'écriture.
http://konrness.com/php5/how-to-prevent-blocking-php-requests - lien vers le blog.
Espérons que cette aide.
La mise en cache de données externes à PHP
Tutoriel Lien - http://www.gayadesign.com/diy/caching-external-data-in-php/
Comment Utiliser le Cache APC avec PHP
Tutoriel Lien - http://www.script-tutorials.com/how-to-use-apc-caching-with-php/