Frage Welchen PHP (Opcode) -Cache sollte man verwenden und warum?


Ich höre immer wieder von einigen PHP (Opcode) -Caches wie - APC, XCache, Memcache, eAccelerator usw.

Aber ich konnte nie herausfinden, wie ich mich entscheiden sollte. Neben dem Leistungsvorteil, den ein Caching-System liefern soll, sollten andere Faktoren ein wichtiger Punkt sein.

Wie, warum Sie sagen, X-Cache-System ist besser als Y? Ich bin weniger besorgt über den relativen Leistungszuwachs. Kleine Unterschiede zwischen zwei Systemen sind weniger wichtig.

Wenn eine allgemeine Antwort auf meine Frage nicht möglich ist, hier sind einige Hinweise. Ich verwende dedizierte VPS mit Mediatemple (mit Root-Zugang). RAM ist 512 MB (physisch) + 400 MB (Swap) Ich bin besorgt über WordPress und seine Cousins ​​WordPress-MU und BuddyPress. 90% unserer Codes / Sites fallen in die WordPress-Familie.

Vielen Dank im Voraus für etwas Hilfe.


42
2017-08-19 15:24


Ursprung




Antworten:


Die Produkte, die Sie auflisten, dienen verschiedenen Zwecken.

OPCode-Caches

Es gibt viele PHP Accelerators (OPCaches) wie hier zu sehen Wikipedia-Liste. Wie bei Open-Source-Produkten üblich, sind sie alle ziemlich ähnlich. XCache ist der Lighttp-PHP-Beschleuniger und ist die Standardauswahl, wenn Sie diesen HTTPd ausführen. Es funktioniert auch gut mit Apache, aber APC scheint etwas mehr "spielt gut mit anderen" sozial gesprochen zu werden, wird offiziell als Teil von PHP unterstützt und wird in Übereinstimmung mit der offiziellen PHP-Distribution veröffentlicht.

Ich habe Usign eAccelerator wegen seiner langsameren Entwicklung aufgegeben und ist gegen die Veröffentlichungen von PHP zurückgeblieben, und der offizielle gesegnete Status, den APC mit ähnlicher Leistung anbietet.

Diese Produkte sind in der Regel Drop-in; Keine Codeänderung, sofortige Leistungssteigerung. Bei großen Codebasen (Drupal, Wordpress) kann die Performance bis zu 3x besser während die Antwortzeit und der Speicherverbrauch gesenkt werden.

Datenzwischenspeicherung

Memcache ist ein etwas anderes Produkt - Sie könnten es als ein Leichtes Schlüsselwertsystem das kann sein auf mehrere Server skaliert. Software muss verbessert werden, um Memcache zu unterstützen, und es löst bestimmte Probleme besser als andere. Wenn Sie auf Ihrer Website eine Liste mit Echtzeit-Bestandswerten hätten, könnten Sie Memcache verwenden, um eine Residentliste des aktuellen Werts zu führen, der auf Ihrer Website angezeigt wird. Sie können damit Sitzungsdaten für die kurzfristige Wiederverwendung speichern. Sie würden es nicht für andere Dinge wie z. B. ganzseitige Caches oder als Ersatz für MySQL verwenden.

Es gibt auch Wordpress Addons wie WP-Super-Cache das kann die Leistung von Wordpress drastisch verbessern (tatsächlich kann WP-Super-Cache in vielen Fällen mit statischen HTML basierten Seiten konkurrieren)

Zusammenfassend - ich würde APC sehr empfehlen, wenn Sie ein "setzen Sie es und vergessen Sie es, gut unterstützt Produkt". 


32
2017-08-19 15:36



Diese Antwort wird auf Meta diskutiert: meta.stackexchange.com/questions/15474/... - Brad Gilbert
Ergänze "[4]: http://" etwas reparieren. - Brad Gilbert
Vielen Dank SirStan! Ihre Antwort löste nicht nur mein Problem, sondern half mir auch, mehr über die Caching-Welt zu erfahren. Ich möchte dich nur noch etwas fragen. Ich benutze bereits wp-supercache. Ist es eine gute Idee, es mit APC zu kombinieren? Wird APC die Leistung weiter signifikant verbessern? Werden APC und Wp-SuperCache zusammenarbeiten? Brauche ich sie beide? Oder APC macht Wp-SuperCache überflüssig? - rahul286
Hinweis: APC führt sowohl Daten-Caching als auch Op-Code-Caching durch. - lo_fye
Diese Antwort ist jetzt sehr veraltet. Es ist unwahrscheinlich, dass APC für zukünftige PHP-Versionen aktualisiert wird, die seit Version 5.5 durch Zend's Optimizer und Opcode-Cache (jetzt als Opcache bekannt) ersetzt wurden. Allerdings habe ich keinen wesentlichen Leistungsunterschied gesehen ( symcbean.blogspot.co.uk/2013/09/ ... ) Das Fehlen von Datenunterstützung in Opcache und das Fehlen von Speicherrückforderungen können das Upgraden für einige produktiv machen. - symcbean


Eine gute Antwort wurde auf stackoverflow gepostet, die deine Frage gut beantwortet.

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


7
2017-08-19 15:39



Es ist wirklich eine nette Diskussion über Stackoverflow. Danke für den Link. :-) - rahul286


APC wird in PHP6 eingebaut, also ist es eine logische Wahl. Ich benutze es und der Leistungsschub ist erstaunlich. Wenn Sie etwas anderes als Opcodes (d. H. Db-Abfrageergebnisse) zwischenspeichern möchten, können Sie APC auch dafür verwenden, aber es ist nicht möglich, APC-Caches zwischen mehreren Servern zu teilen. Wenn Sie nur auf einem einzelnen Server cachen müssen, ist APC großartig. Wenn Sie auf mehrere Server skalieren und einen Cache zwischen ihnen teilen möchten, Memcached ist dein Mann.

Eine Sache, die ich tun würde, ist jedoch, eine Wrapper-Klasse für jedes (Nicht-Opcode) -Cache zu erstellen, das Sie tun. Auf diese Weise können Sie die Cache-Engine austauschen, ohne Ihren Code zu ändern.


5
2017-08-19 15:40



BEEINDRUCKEND. Hätte ich den offiziellen Status von APC gekannt, hätte ich langfristig auf ihn zurückgeschaltet ... :-) Ich wusste auch nicht viel über Opcode- / Nicht-Opcode-Cache-Unterschiede. Als persönliche Entscheidung möchte ich nicht den Aufwand für die Erstellung von Wrapper-Klassen oder die Änderung der Quelle meiner Apps berücksichtigen, um sie bei der Caching-Umgebung zu unterstützen. - rahul286
Da PHP 5.5 Zend Opcache als "offiziellen" Opcode-Cache integriert hat, denke ich, dass es unwahrscheinlich ist, dass sie zu APC für PHP 6 wechseln werden. - Matteo Tassinari
Um dies zu korrigieren: PHP 5.5 wird in der Tat mit Zend Opcache ausgeliefert. Es wird kein PHP 6 geben. Stattdessen wird es PHP 7 geben. APC ist fast (?) Veraltet zu betrachten. - Jisse Reitsma


Nur um festzustellen, dass sich die Dinge ein wenig geändert haben und es scheint, dass APC nicht in PHP 6 Core enthalten sein wird.

APC hat eine langsame Entwicklung und es sieht so aus, als wäre es niemals PHP 5.5-kompatibel. Aus diesem Grund sieht es so aus, als würden Leute von PHP Zend OPCache Opcode Cache Erweiterung als PHP CORE Erweiterung setzen. Sie interessieren sich, lesen Sie hier mehr http://wiki.php.net/rfc/optimizerplus.

Wichtiger Hinweis: Zend OPCache hat keinen Benutzerdaten-Cache wie APC. Wenn Sie also einen Benutzerdaten-Cache benötigen, können Sie ihn zusammen mit Memcache verwenden.


5
2017-08-25 09:20



Außerdem wird der gesamte Cache ungültig, wenn er voll ist (ungültige Einträge werden NICHT entfernt). Wenn Sie also mehr Code als Arbeitsspeicher haben oder häufig bereitstellen, erwarten Sie Leistungsspitzen. - symcbean


Wenn Sie eine PHP-Version von mindestens 5.50 verwenden, ist OpCache die beste Wahl (PHP / PECL native library). Es sollte vorkompiliert sein, wenn es von binär installiert wird.

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

Wenn Sie eine PHP-Version vor 5.5 verwenden, ist APC (PHP / PECL-nativer OpCode-Cache) die einfachste Wahl, obwohl es als nicht gepflegt und tot betrachtet wird:

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

Die Verwendung der nativen OpCache-Funktionalität von PHP sollte Ihnen die Mühe ersparen, Bibliotheken von Drittanbietern zu verwalten.


2
2018-01-16 21:39



Wenn PHP <5.5 ausgeführt wird, sollten Sie es zuerst aktualisieren. - Michael Hampton♦
@ michael-hampton :: In der Tat! In seltenen Fällen können Sie PHP jedoch nicht aktualisieren, ohne das Betriebssystem zu aktualisieren. Dies kann sogar eine neue Hardware-Anforderung bedeuten. Beispiel - Ich arbeite für eine Firma, die IBM i-series Server Version 6somethings ausführt. Unsere PHP Version ist 5.4.3. Da IBM für die Portierung von PHP-Versionen auf Zend angewiesen ist, benötigt PHP 5.6 eine neuere Version von IBM-i OS - 7.1 oder neuer (und später eine neuere Version des Zend PHP-Servers), die neue Power-8-Server usw. erfordert ... meh. - recurse


Memcache speichert Schlüssel / Wert-Paare, keine Opcodes. Sie können es in Verbindung mit einem der Opcode-Caches verwenden.


0
2017-08-19 15:35



Es scheint aus SirStans Antwort (unten), dass Memcache mich brauchen könnte, um meine PHP-Apps zu ändern. Eigentlich verwende ich Wordpress und die Änderung seines Kerncodes ist keine gute Idee. - rahul286