Memcached vs APC, lequel dois-je choisir? [fermé]

161

J'ai lu cet article: http://www.mysqlperformanceblog.com/2006/09/27/apc-or-memcached/ depuis longtemps .. Je veux obtenir le meilleur moteur de cache disponible pour que mon application soit vraiment rapide. Bien sûr, je ne veux pas trop de cache, mais je veux au moins choisir la meilleure chose qui soit. Dans cet article , il est dit Memcached est lent et apc est rapide , alors pourquoi tout le monde est choisissant memcached ?

http://framework.zend.com/manual/en/zend.cache.backends.html#zend.cache.backends.twolevels ici est dit "utilisez un rapide (mais limité) comme Apc, Memcache ... et un "slow" comme File, Sqlite ... "Pensez-vous qu'utiliser Apc comme rapide et Memcache comme lent est une bonne idée?

Thomaschaaf
la source
14
BTW: vous devez utiliser APC même si vous ne l'utilisez pas apc_store. Le cache Opcode seul rend PHP quelques fois plus rapide.
Kornel
@porneL: que voulez-vous dire? APC augmente-t-il la vitesse de PHP après seulement l'installation, même si je n'ajoute pas de code pour mettre en cache quoi que ce soit dans mes scripts?
Marco Demaio le
5
@Marco Demaio: En effet. APC est principalement un optimiseur PHP (optimisé par défaut tant qu'il est activé), et apc_store()n'est qu'un bonus supplémentaire en plus de cela.
Kornel le
3
en 2014, si vous ne l'utilisez que pour la mise en cache sur 1 serveur, optez pour APCu.
Flion

Réponses:

268

Memcached est un système de mise en cache distribué, alors qu'APC n'est pas distribué - et principalement un cache d'opcode.

Si (et seulement si) vous avez une application Web qui doit vivre sur différents serveurs Web (équilibrage de charge), vous devez utiliser Memcache pour la mise en cache distribuée. Sinon, tenez-vous en à APC et à son cache.

Vous devriez toujours utiliser un cache opcode, ce qu'APC est (également APC sera intégré dans php6 iirc, alors pourquoi ne pas commencer à l'utiliser maintenant).

Vous pouvez / devriez utiliser les deux à des fins différentes.

Karsten
la source
5
Superbe réponse +1. Ma question est maintenant qu'est-ce qu'une opcodecache?
Marco Demaio
4
@Karsten Si vous avez différents serveurs (comme un environnement cloud à répartition de charge) tant que vous n'avez pas besoin de maintenir / partager l'état entre eux, APC fonctionnera également bien comme un cache mémoire direct - mais peut-être pas aussi optimal que chacun l'instance cloud devra réchauffer son propre cache ...
Ray
35
Un opcodecache est celui qui compile le code PHP brut en code machine ("opcode") et le stocke ensuite sous la forme compilée pour les demandes futures (jusqu'à ce qu'il détecte que le fichier PHP d'origine a changé). Cela signifie que PHP n'a pas à exécuter cette étape de compilation à chaque requête, ce qui permet de gagner du temps. C'est juste l'un des moyens de garantir un site rapide (parmi tant d'autres).
Simon East
2
Il y a un diaporama intéressant qui explique certaines des différences avec les diagrammes et les repères, ici: slideshare.net/FordAntiTrust/php-performance-with-apc-memcached
Simon East
1
Memechached peut-il être utilisé dans un système non distribué au lieu d'APC? Il sera bon de n'en garder qu'une si à l'avenir vous aurez plus de machines. droite? Ou les utiliser tous les deux, l'un pour l'opcode et l'autre pour la mise en cache extensible?
Adib Aroui
43

Memcached si vous avez besoin de préserver l'état sur plusieurs serveurs Web (si la charge est équilibrée et qu'il est important que ce qui se trouve dans le cache soit le même pour tous les serveurs).

APC si vous avez juste besoin d'accéder à une mémoire rapide pour lire (et écrire) sur un (ou chaque) serveur.

N'oubliez pas qu'APC peut également compiler et accélérer le temps d'exécution de votre script. Ainsi, vous pouvez par exemple utiliser APC pour augmenter les performances d'exécution, tout en utilisant Memcached pour le stockage en cache.

xkcd150
la source
3
APC peut également mettre en cache le stockage ... Ou?
mr_app
7
Mise à jour 2014: PHP 5.5 inclura nativement Zend Optimizer Plus (qui est uniquement pour opcache, donc pas pour le cache utilisateur) et il semble qu'APC ne sera pas développé au-delà de PHP 5.4? Cependant, il y a maintenant APCu pecl.php.net/package/APCu , qui n'a pris que les parties du cache utilisateur d'APC
Flion
18

Le principal avantage d'APC est le cache opcode. Comme PHP 5.5 a intégré OpCache à son cœur et qu'APC pour PHP 5.4 est toujours signalé comme bêta, ce n'est pas une annonce officielle, mais le développement d'APC serait abandonné dans un proche avenir.

Je vous recommande donc de choisir Memcached.

Hieu Vo
la source
5
J'ai passé des heures sur le Web à y réfléchir et j'ai la même conclusion.
Nicolas Zozol
9

J'utilise l'un pour la vitesse et l'autre pour synchroniser tous mes serveurs. Si vous utilisez Memcache, gardez à l'esprit les ports ouverts que vous devrez bloquer avec iptables.

Saimon Lovell
la source
6

Hey Thomaschaaf, j'espère que cet outil n'est pas en retard pour vous, mais veuillez noter qu'APC a des problèmes liés au "cache utilisateur". Pour faire une histoire courte, lorsque vous définissez des délais d'expiration pour les entrées de cache, ou si votre apache se bloque dans le code APC interne (timeout, par exemple), alors vous pouvez rencontrer des problèmes.

J'ai une entrée sur le problème ici: http://nirlevy.blogspot.com/2009/06/apc-futexwait-lockdown-make-your-apache.html , et vous devriez également lire http: //t3.dotgnu. info / blog / php / user-cache-timebomb.html (de l'un des développeurs APC, je pense)

Nir Levy
la source
22
Je suis tombé sur cela et je voulais mettre à jour qu'il semble avoir été résolu maintenant (comme il se doit, 2 ans plus tard!). Voici un rapport de bogue fermé, par exemple: bugs.debian.org/cgi-bin/bugreport.cgi?bug=572529
Shane H
1

J'utilise uniquement APC car APC est un cache de code et agit comme Memcache! Un seul fichier de configuration au lieu de 2.

Et un seul endroit pour surveiller les deux cache .....

Thomas Decaux
la source
1

Cela dépend de ce que vous faites, mais pour mes sites Web Drupal fonctionnant sur un VPS, je trouve qu'APC fonctionne très bien! Si vous exécutez CentOS 6, il est disponible en tant que mise à jour yum si simple à installer et sans configuration car les valeurs par défaut sont raisonnables. Une évidence à mon humble avis.

fred
la source