43 votes

Quel cache PHP (opcode) faut-il utiliser et pourquoi?

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

Mais je n'ai jamais réussi à comprendre comment en choisir un. Outre les avantages en termes de performances, qu'un système de mise en cache est censé offrir, quels autres facteurs devraient être pris en compte.

Par exemple, pourquoi diriez-vous que le système X cache est meilleur que Y? Je suis moins préoccupé par le gain de performance relatif. Les petites différences entre deux systèmes importent moins.

Si une réponse générique à ma question n'est pas possible, voici quelques points de repère. J'utilise un VPS dédié chez Mediatemple (avec accès root). La 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/sites appartiennent à la famille WordPress.

Merci d'avance pour votre aide.

32voto

IttyBrittyGirlGamer Points 1798

Les produits que vous répertoriez servent à des fins différentes.

Les caches OPCode

Il existe de nombreux accélérateurs PHP (OPCaches) comme indiqué sur cette liste Wikipedia. Comme c'est souvent le cas avec les produits open source, ils sont tous assez similaires. XCache est l'accélérateur PHP lighttp, et est le choix par défaut lorsque vous exécutez cet HTTPd. Il fonctionne également bien avec Apache, cependant APC semble être légèrement plus "socialement parlant bien avec les autres", étant officiellement pris en charge en tant que partie de PHP, et est publié en même temps que la distribution PHP officielle.

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

Ces produits sont généralement plug-and-play; aucune modification de code instantanée pour améliorer les performances. Avec de grandes bases de code (Drupal, Wordpress), les performances peuvent être jusqu'à 3 fois meilleures 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 clés/valeurs léger qui peut être étendu à 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 pourriez utiliser Memcache pour conserver une liste résidente de la valeur actuelle qui est affichée sur votre site. Vous pourriez l'utiliser pour stocker des données de session pour une réutilisation à court terme. Vous ne l'utiliseriez pas pour d'autres choses comme les caches de pages entières, ou comme remplacement de MySQL.

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

En résumé - je recommanderais vivement APC si vous voulez un produit "configurez-le et oubliez-le, bien supporté".

8voto

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

6voto

abbot Points 8093

APC sera intégré dans PHP6, donc c'est un choix logique. Je l'utilise et l'augmentation des performances est incroyable. Si vous avez besoin de mettre en cache autre chose que des opcodes (par exemple, les résultats des requêtes de base de données), vous pouvez également utiliser APC, mais il n'est pas possible de partager les caches APC entre plusieurs serveurs. Si vous avez juste besoin de mettre en cache sur un seul serveur, APC est génial. Si vous avez besoin de mettre à l'échelle vers plusieurs serveurs et que vous voulez partager un cache entre eux, memcached est votre homme.

Une chose que je ferais, par contre, est de créer une classe enveloppe pour tout ce que vous mettez en cache (autre que les opcodes). De cette façon, vous pouvez remplacer le moteur de mise en cache sans changer votre code.

6voto

Nemke Points 248

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

APC a un développement lent et il semble qu'il ne sera jamais compatible avec PHP 5.5. Pour cette raison, il semble que les gens de PHP vont mettre en place l'extension de cache d'opcode Zend OPCache comme extension CORE de PHP. Vous pouvez en savoir plus ici http://wiki.php.net/rfc/optimizerplus.

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

3voto

recurse Points 131

Si vous exécutez la version PHP au moins 5,5, OpCache est votre meilleur choix (bibliothèque native PHP / PECL). Il doit être précompilé si vous l'installez à partir du binaire.

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

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

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

L'utilisation de la fonctionnalité native OpCache de PHP devrait vous éviter les problèmes liés à la maintenance de bibliothèques tierces.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X