Vraag Welke PHP (opcode) cache moet men gebruiken en waarom?


Ik blijf horen over een aantal PHP (opcode) caches zoals - APC, XCache, Memcache, eAccelerator, etc.

Maar ik kon er nooit achter komen hoe ik er een moest kiezen. Afgezien van de prestatie-voordelen, die een caching-systeem zou moeten leveren, welke andere factoren zouden een punt van zorg moeten zijn.

Zoals waarom zul je zeggen dat X cache-systeem beter is dan Y? Ik ben minder bezorgd over de relatieve prestatiewinst. Kleine verschillen tussen twee systemen zijn minder van belang.

Als een generiek antwoord op mijn vraag niet mogelijk is, zijn hier enkele tips. Ik gebruik dedicated VPS met Mediatemple (met root-toegang). RAM is 512 MB (fysiek) + 400 MB (swap) Ik maak me zorgen over WordPress en zijn neven WordPress-MU en BuddyPress. 90% van onze codes / sites vallen onder de WordPress-familie.

Alvast bedankt voor hulp.


42
2017-08-19 15:24


oorsprong




antwoorden:


De producten die u opslaat, hebben verschillende doelen.

OPCode caches

Er zijn veel PHP Accelerators (OPCaches) zoals hier op gezien Wikipedia-lijst. Zoals gebruikelijk is bij open source producten, zijn ze allemaal redelijk vergelijkbaar. XCache is de lighttp PHP-accelerator en is de standaardkeuze wanneer je die HTTPd uitvoert. Het werkt ook goed met Apache, maar APC lijkt in sociaal opzicht iets meer "goed te spelen met anderen", wordt officieel ondersteund als onderdeel van PHP en wordt vrijgegeven in stap met de officiële PHP-distributie.

Ik heb e-Accelerator eAccelerator verlaten vanwege de trage ontwikkeling ervan en achterblijvend tegen de releases van PHP en de officiële gezegende status die APC biedt met vergelijkbare prestaties.

Deze producten zijn meestal drop-in; geen code verandering onmiddellijke prestatieverbetering. Met grote codebases (Drupal, Wordpress) kan de uitvoering goed zijn 3x beter terwijl de reactietijd en het geheugengebruik worden verlaagd.

Data Caching

memcache is een iets ander product - je zou het kunnen beschouwen als een lichtgewicht sleutelwaardesysteem dat kan zo zijn geschaald naar meerdere servers. Software moet worden uitgebreid om Memcache te ondersteunen, en het lost bepaalde problemen beter op dan andere. Als u een lijst met realtime voorraadwaarden op uw website had, kunt u Memcache gebruiken om een ​​residentlijst bij te houden van de huidige waarde die op uw website wordt weergegeven. U kunt het gebruiken om sessiegegevens op te slaan voor hergebruik op korte termijn. Je zou het niet gebruiken voor andere dingen zoals volledige pagina caches, of als vervanging voor MySQL.

Er zijn ook Wordpress-add-ons zoals WP-Super-Cache dat kan de prestaties van Wordpress drastisch verbeteren (in feite kan WP-Super-Cache in veel gevallen strijden met sites op basis van statische HTML)

Samenvattend: ik zou APC ten zeerste aanbevelen als u een "set it and forget it, well supported product" wilt. 


32
2017-08-19 15:36



Dit antwoord wordt besproken op Meta: meta.stackexchange.com/questions/15474/... - Brad Gilbert
Vul in "[4]: http://" om het te repareren. - Brad Gilbert
Bedankt SirStan! Uw antwoord loste niet alleen mijn probleem op, maar zorgde er ook voor dat ik meer inzicht kreeg in de wereld van caching. Ik wil je nog een ding vragen. Ik gebruik al wp-supercache. Is het een goed idee om het te combineren met APC? Zal APC de prestaties verder aanzienlijk verbeteren? Zullen APC en Wp-SuperCache samenwerken? Heb ik ze allebei nodig? Of APC maakt Wp-SuperCache overbodig? - rahul286
Opmerking: APC doet caching van gegevenscaching en op-code. - lo_fye
Dit antwoord is nu erg verouderd. Het is onwaarschijnlijk dat APC wordt bijgewerkt voor toekomstige versies van PHP die zijn vervangen door Zend's optimizer en opcode cache (nu bekend als opcache) sinds v. 5.5. Ik heb echter geen substantieel verschil in prestaties gezien ( symcbean.blogspot.co.uk/2013/09/... ) verder kan het gebrek aan gegevensondersteuning in opcache en het ontbreken van geheugenterugwinning het voor sommigen contraproductief maken. - symcbean


Een goed antwoord werd gepost op stackoverflow die je vraag mooi beantwoordt.

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


7
2017-08-19 15:39



Het is echt een leuke discussie over stackoverflow. Bedankt voor de link. :-) - rahul286


APC wordt ingebouwd in PHP6, dus het is een logische keuze. Ik gebruik het en de prestatieverbetering is geweldig. Als u iets anders dan opcodes (db queryresultaten) in de cache wilt opslaan, kunt u ook APC gebruiken, maar het is niet mogelijk om APC-caches te delen tussen meerdere servers. Als u alleen op één server hoeft te cachen, is APC geweldig. Als u wilt opschalen naar meerdere servers en een cache tussen deze servers wilt delen, memcached is jouw man.

Een ding wat ik echter wel zou doen, is om een ​​wrapper-klasse te maken voor elke (niet-opcode) caching die je doet. Op die manier kunt u de caching-engine uitwisselen zonder uw code te wijzigen.


5
2017-08-19 15:40



WAUW. Als ik de officiële status van APC had gekend, was ik er op lange termijn weer overheen gegaan ... :-) Ik wist ook niet veel over opcode / niet-opcode cache verschil. Als een persoonlijke keuze, wil ik niet door de overhead gaan van het maken van wrapperklassen of het wijzigen van de bron van mijn apps om ze te helpen zich aan te passen met caching-env. - rahul286
Merk op dat, aangezien PHP 5.5 Zend Opcache als "officiële" opcode cache heeft geïntegreerd, ik denk dat het onwaarschijnlijk is dat ze voor PHP 6 naar APC zullen overschakelen. - Matteo Tassinari
Om dit te corrigeren: PHP 5.5 wordt inderdaad geleverd met Zend Opcache. Er zal geen PHP 6 zijn. In plaats daarvan zal er een PHP 7 zijn. APC moet bijna (?) Verouderd worden beschouwd. - Jisse Reitsma


Gewoon om op te merken dat de dingen een beetje zijn veranderd en het lijkt erop dat APC niet zal worden opgenomen in PHP 6 core.

APC heeft een trage ontwikkeling en het lijkt erop dat het nooit PHP 5.5-compatibel zal zijn. Daarom lijkt het erop dat jongens van PHP Zend OPCache opcode cache-extensie instellen als de PHP CORE extensie. Je geeft er meer om hier te lezen http://wiki.php.net/rfc/optimizerplus.

Belangrijke opmerking: Zend OPCache heeft geen cache voor gebruikersgegevens zoals APC, dus als u cache voor gebruikersgegevens nodig hebt, kunt u deze gebruiken samen met Memcache.


5
2017-08-25 09:20



Het maakt ook de gehele cache ongeldig wanneer deze vol raakt (ongeldige vermeldingen worden NIET verwijderd) - dus als u meer code dan het geheugen hebt of vaak implementeert, verwacht dan prestatiespieken te zien. - symcbean


Als PHP-versie minimaal 5,50 is, is OpCache de beste keuze (PHP / PECL native library). Het moet vooraf worden samengesteld als het wordt geïnstalleerd vanuit binair.

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

Als PHP-versie vóór 5.5 wordt uitgevoerd, is APC (PHP / PECL-native OpCode-cache) de eenvoudigste keuze, hoewel deze als niet-onderhouden en dood wordt beschouwd:

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

Het gebruik van de native OpCache-functionaliteit van PHP zou u de moeite moeten besparen om bibliotheken van derden te onderhouden.


2
2018-01-16 21:39



Als PHP <5.5 wordt uitgevoerd, is het allereerste wat je zou moeten doen het updaten. - Michael Hampton♦
@ michael-hampton :: Inderdaad! Maar in sommige zeldzame gevallen kunt u PHP niet bijwerken zonder het besturingssysteem te upgraden, wat misschien zelfs een nieuwe hardwarevereiste betekent. Voorbeeld - Ik werk voor een bedrijf met IBM i-serieservers, versie 6, dat is. Onze PHP-versie is 5.4.3. Omdat IBM afhankelijk is van Zend voor het porten van PHP-versies, heeft PHP 5.6 een nieuwere versie van het IBM-i OS - 7.1 of nieuwer (en vervolgens een nieuwere versie van de Zend PHP-server) nodig, waarvoor nieuwe Power-8-servers nodig zijn ... meh. - recurse


Memcache caches sleutel / waarde-paren, geen opcodes. Je kunt het gebruiken in combinatie met een van de opcode caches.


0
2017-08-19 15:35



Uit het antwoord van SirStan (hieronder) blijkt dat memcache me misschien nodig heeft om mijn PHP-apps aan te passen. Eigenlijk gebruik ik Wordpress en het wijzigen van de kerncode is geen goed idee. - rahul286