Memcached vs APC quale dovrei scegliere? [chiuso]


161

Ho letto questo articolo: http://www.mysqlperformanceblog.com/2006/09/27/apc-or-memcached/ dal lontano quando .. Voglio ottenere il miglior motore di cache disponibile in modo che la mia applicazione sia davvero veloce. Ovviamente non voglio over-cache ma voglio almeno scegliere la cosa migliore là fuori. In quell'articolo dice che Memcached è lento e apc è veloce, quindi perché tutti scelgono memcached ?

http://framework.zend.com/manual/en/zend.cache.backends.html#zend.cache.backends.twolevels qui dice "usa uno veloce (ma limitato) come Apc, Memcache ... e un "lento" come File, Sqlite ... "pensi che usare Apc come il veloce e Memcache come il lento sia una buona idea?


14
A proposito: dovresti usare APC anche se non lo usi apc_store. La sola cache Opcode rende PHP poche volte più veloce.
Kornel,

@porneL: cosa intendi? APC aumenta la velocità di PHP solo dopo l'installazione, anche se non aggiungo codice per memorizzare nella cache qualcosa nei miei script?
Marco Demaio,

5
@Marco Demaio: Anzi. APC è principalmente un ottimizzatore PHP (ottimizza per impostazione predefinita fino a quando è abilitato), ed apc_store()è solo un bonus in più.
Kornel,

3
nel 2014, se lo usi solo per la memorizzazione nella cache su 1 server, scegli APCu.
Flion,

Risposte:


268

Memcached è un sistema di memorizzazione nella cache distribuito, mentre APC non è distribuito, e principalmente una cache opcode.

Se (e solo se) si dispone di un'applicazione Web che deve vivere su server Web diversi (bilanciamento del carico), è necessario utilizzare memcache per la cache distribuita. In caso contrario, attenersi ad APC e alla sua cache.

Dovresti sempre usare una cache del codice operativo, che è APC (anche APC verrà integrato in phirc iirc, quindi perché non iniziare a usarlo ora).

Puoi / dovresti usare entrambi per scopi diversi.


5
Splendida risposta +1. La mia domanda ora è: cos'è una opcodecache?
Marco Demaio,

4
@Karsten Se hai server diversi (come un ambiente cloud loadbalaced) fintanto che non hai bisogno di mantenere / condividere lo stato su di essi, APC funzionerà anche bene come una cache di memoria, anche se forse non ottimale come ciascuno l'istanza cloud dovrà riscaldare la propria cache ...
Ray

35
Una opcodecache è una cache che compila il semplice codice PHP in codice macchina ("opcode") e quindi lo memorizza nel modulo compilato per richieste future (fino a quando non rileva che il file PHP originale è cambiato). Ciò significa che PHP non deve eseguire questo passo di compilazione su ogni singola richiesta, risparmiando un po 'di tempo. È solo uno dei modi per contribuire a garantire un sito veloce (tra molti altri).
Simon East,

2
C'è una presentazione interessante che spiega alcune delle differenze con diagrammi e benchmark, qui: slideshare.net/FordAntiTrust/php-performance-with-apc-memcached
Simon East

1
Memechached può essere utilizzato in un sistema non distribuito anziché in APC? Sarà bene tenerne solo uno se in futuro avrai più macchine. giusto? Oppure usali entrambi, uno per il codice operativo e l'altro per la memorizzazione nella cache estensibile?
Adib Aroui,

43

Memcached se è necessario preservare lo stato su più server Web (se si è in bilanciamento del carico ed è importante che ciò che è nella cache sia lo stesso per tutti i server).

APC se hai solo bisogno di accedere alla memoria rapida per leggere (e scrivere) su un (o ciascuno) server.

Ricorda che APC può anche compilare e velocizzare i tempi di esecuzione degli script. Quindi, ad esempio, potresti utilizzare APC per migliorare le prestazioni di esecuzione, mentre usi memcached per l'archiviazione della cache.


3
APC può anche memorizzare nella cache ... O?
mr_app,

7
Aggiornamento 2014: PHP 5.5 includerà nativamente Zend Optimizer Plus (che è solo per opcache, quindi non per la cache dell'utente) e sembra che APC non sarà sviluppato oltre PHP 5.4? Tuttavia, v'è ora APCu pecl.php.net/package/APCu , che ha avuto solo le parti della cache utente di APC
Flion

18

Il principale vantaggio di APC è la cache opcode. Poiché PHP 5.5 ha integrato OpCache nel suo core e APC per PHP 5.4 è ancora contrassegnato come beta, non è un annuncio ufficiale, ma lo sviluppo di APC sarebbe abbandonato nel prossimo futuro.

Quindi ti consiglio di scegliere Memcached.


5
Ho trascorso ore sul web a pensarci e ho le stesse conclusioni.
Nicolas Zozol,

9

Uso sia l'uno per la velocità sia l'altro per sincronizzare tutti i miei server. Se usi memcache, tieni a mente le porte aperte che dovrai bloccare con iptables.


6

Ehi Thomaschaaf, spero che questo non sia uno strumento in ritardo per te, ma tieni presente che APC ha alcuni problemi relativi alla "cache dell'utente". Per farla breve, quando si impostano i timeout per le voci della cache o se l'apache si arresta in modo anomalo all'interno del codice APC interno (timeout, ad esempio), potrebbero verificarsi alcuni problemi.

Ho una voce sul problema qui: http://nirlevy.blogspot.com/2009/06/apc-futexwait-lockdown-make-your-apache.html e dovresti anche leggere http: //t3.dotgnu. info / blog / php / user-cache-timebomb.html (credo da uno degli sviluppatori APC)


22
Mi sono imbattuto in questo e volevo aggiornare che sembra essere stato risolto ora (come dovrebbe, 2 anni dopo!). Ecco una segnalazione di bug chiusa, ad esempio: bugs.debian.org/cgi-bin/bugreport.cgi?bug=572529
Shane H,

1

Uso solo APC poiché APC è una cache di codice e si comporta come memcache! Solo 1 file di configurazione invece di 2.

E solo 1 posto per monitorare entrambe le cache .....


1

Dipende da cosa stai facendo ma per i miei siti Web drupal in esecuzione su un VPS trovo che APC funzioni alla grande! Se stai eseguendo CentOS 6, è disponibile come aggiornamento yum, quindi semplicissimo da installare e nessuna configurazione poiché le impostazioni predefinite sono ragionevoli. Un imho senza sforzo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.