web-dev-qa-db-fra.com

Quel PHP (opcode) cache doit-on utiliser et pourquoi?

Je continue d'entendre parler de certains caches PHP (opcode) comme - APC, XCache, Memcache, eAccelerator, etc.

Mais je n'ai jamais pu comprendre comment en choisir un. Outre les avantages en termes de performances, qu'un système de mise en cache est censé fournir, quels autres facteurs devraient être un sujet de préoccupation.

Comme pourquoi vous direz que le système de cache X est meilleur que Y? Je suis moins préoccupé par le gain de performances relatif. Les petites différences entre deux systèmes quelconques importent moins.

Si une réponse générique à ma question n'est pas possible, voici quelques conseils. J'utilise un VPS dédié avec Mediatemple (avec un accès root). RAM est de 512 Mo (physique) + 400 Mo (swap) je suis préoccupé par WordPress et ses cousins ​​WordPress-MU et BuddyPress. 90% de nos codes/les sites appartiennent à la famille WordPress.

Merci d'avance pour votre aide.

44
rahul286

Les produits que vous listez ont des objectifs différents.

Caches OPCode

Il existe de nombreux PHP accélérateurs (OPCaches) comme on le voit sur ce liste Wikipedia . Comme c'est souvent le cas avec les produits open source, ils sont tous assez similaires. XCache est le lighttp = PHP accélérateur, et est le choix par défaut lorsque vous exécutez ce HTTPd. Il fonctionne aussi bien avec Apache, cependant APC semble être un peu plus "bien jouer avec les autres" socialement parlant, étant officiellement pris en charge dans le cadre de PHP, et est publié en phase avec la distribution officielle PHP.

J'ai abandonné usign eAccelerator en raison de son ralentissement du développement et de son retard par rapport aux versions de PHP, et du statut officiel béni qu'APC offre avec des performances similaires.

Ces produits sont généralement intégrés; aucune amélioration instantanée des performances de changement de code. Avec de grandes bases de code (Drupal, Wordpress), les performances peuvent aller jusqu'à fois mieux tout en réduisant le temps de réponse et l'utilisation de la mémoire.

Mise en cache des données

Memcache est un produit légèrement différent - vous pourriez le considérer comme un système de valeur de clé léger qui peut être mis à l'échelle sur plusieurs serveurs . Le logiciel doit être amélioré pour prendre en charge Memcache, et il résout certains problèmes mieux que d'autres. Si vous aviez une liste de valeurs boursières en temps réel sur votre site Web, vous pouvez utiliser Memcache pour conserver une liste résidente de la valeur actuelle qui s'affiche sur votre site Web. Vous pouvez l'utiliser pour stocker des données de session pour une réutilisation à court terme. Vous ne l'utiliseriez pas pour d'autres choses telles que les caches pleine page ou en remplacement de MySQL.

Il existe également Wordpress addons tels que WP-Super-Cache qui peuvent considérablement améliorer les performances de Wordpress (en fait, WP-Super-Cache peut rivaliser avec les sites statiques basés sur HTML dans de nombreux cas)

En résumé - je recommanderais fortement APC si vous voulez un "définissez-le et oubliez-le, produit bien pris en charge".

33
SirStan

Une bonne réponse a été publiée sur stackoverflow qui répond bien à votre question.

https://stackoverflow.com/questions/28716/which-php-opcode-cacher-should-i-use-to-improve-performance

8
The Pixel Developer

Juste pour noter que les choses ont un peu changé et il semble que APC ne sera pas inclus dans PHP 6 core.

APC a un développement lent et il semble qu'il ne sera jamais compatible avec PHP 5.5. Pour cette raison, il ressemble à des gars de PHP définira le cache d'opcode Zend OPCache) comme extension PHP CORE extension. Vous vous souciez d'en savoir plus ici http://wiki.php.net/rfc/optimizerplus .

Remarque importante: Zend OPCache n'a pas de cache de données utilisateur comme APC, donc si vous avez besoin d'un cache de données utilisateur, vous pouvez l'utiliser avec Memcache.

6
Nemke

APC sera intégré à PHP6, c'est donc un choix logique. Je l'utilise et le gain de performances est incroyable. Si vous devez mettre en cache autre chose que des opcodes (c'est-à-dire des résultats de requête db), vous pouvez également utiliser APC pour cela, mais il n'est pas possible de partager des caches APC entre plusieurs serveurs. Si vous n'avez besoin de mettre en cache que sur un seul serveur, APC est parfait. Si vous devez évoluer sur plusieurs serveurs et partager un cache entre eux, memcached est votre homme.

Une chose que je ferais, cependant, est de créer une classe wrapper pour toute mise en cache (non opcode) que vous faites. De cette façon, vous pouvez échanger le moteur de mise en cache sans changer votre code.

6
lo_fye

Si vous exécutez PHP version au moins 5,50, OpCache est votre meilleur pari (bibliothèque native PHP/PECL). Il devrait être précompilé si vous installez à partir de binaire.

http://php.net/manual/en/book.opcache.php

Si vous exécutez PHP version antérieure à 5.5, APC (cache natif OpCode PHP/PECL) serait le choix le plus simple, bien qu'il soit considéré comme non entretenu et mort:

http://php.net/manual/en/book.apc.php

L'utilisation de la fonctionnalité native OpCache de PHP devrait vous éviter de devoir gérer des bibliothèques tierces.

3
recurse

Memcache met en cache les paires clé/valeur, pas les opcodes. Vous pouvez l'utiliser en conjonction avec l'un des caches d'opcode.

0
user10699