Quando dovrei usare Memcache invece di Memcached?


321

Sembra che PHP abbia due librerie memcached chiamate memcache e memcached . Qual è la differenza e come fai a sapere quale usare? Uno è obsoleto? Sembra che memcached offra più metodi, quindi suppongo significhi che ha avuto il maggior sviluppo - ma sembra anche richiedere librerie C / C ++ esterne, quindi non sono sicuro di poterlo installare.

Sembra che memcache sia in circolazione da più tempo, non richiede librerie aggiuntive e abbia binari precompilati anche per Windows! Penserei che sarebbe la scelta migliore per ora. Tuttavia, essendo nuovo su memcached (server) non sono sicuro se ci sono alcune funzioni super importanti in memcached (php) che valgono la pena di avere problemi extra.


1
ZendCon ha avuto un episodio piacevole confrontando entrambi. ZendCon Sessions Episode 040: Memcached: l'interfaccia di Memcache migliore
John Magnolia,

duplicato di serverfault.com/questions/63383/memcache-vs-memcached in pochi giorni, ma questo ha ottenuto più visualizzazioni e voti :)
Stefano

Risposte:


249

La libreria client memcached è stata recentemente rilasciata come stabile. Viene utilizzato da digg (sviluppato per digg da Andrei Zmievski, ora non più con digg) e implementa molto di più del protocollo memcached rispetto al client memcache precedente. Le caratteristiche più importanti di memcached sono:

  1. Token cas . Ciò ha reso la mia vita molto più semplice ed è un facile sistema preventivo per dati non aggiornati. Ogni volta che si estrae qualcosa dalla cache, è possibile ricevere con esso un token cas (un doppio numero). È possibile utilizzare quel token per salvare l'oggetto aggiornato. Se nessun altro ha aggiornato il valore mentre il thread era in esecuzione, lo scambio avrà esito positivo. Altrimenti è stato creato un token cas più recente e si è costretti a ricaricare i dati e salvarli nuovamente con il nuovo token.
  2. La lettura dei callback è la cosa migliore dopo il pane a fette. Ha semplificato gran parte del mio codice.
  3. getDelayed () è una bella funzionalità che può ridurre il tempo che lo script deve attendere affinché i risultati tornino dal server.
  4. Mentre il server memcached dovrebbe essere molto stabile, non è il più veloce. È possibile utilizzare il protocollo binario anziché ASCII con il client più recente.
  5. Ogni volta che si salvano dati complessi in memcached, il client eseguiva sempre la serializzazione del valore (che è lento), ma ora con client memcached è possibile utilizzare igbinary . Finora non ho avuto la possibilità di testare quanto possa essere un guadagno in termini di prestazioni.

Tutto questo mi è bastato per passare al client più recente e posso dirti che funziona come un fascino. C'è quella dipendenza esterna dalla libreria libmemcached , ma sono comunque riusciti a installarlo su Ubuntu e Mac OSX, quindi finora nessun problema.

Se decidi di eseguire l'aggiornamento alla libreria più recente, ti suggerisco di aggiornare all'ultima versione del server e che ha anche delle belle funzionalità. Sarà necessario installare libevent per la compilazione, ma su Ubuntu non è stato un grosso problema.

Finora non ho visto alcun framework prelevare il nuovo client memcached (anche se non ne tengo traccia), ma presumo che Zend entrerà presto.

AGGIORNARE

Zend Framework 2 ha un adattatore per Memcached che può essere trovato qui


1
Risposta eccellente; inoltre, la dipendenza esterna da libmemcached è in realtà un vantaggio, in questo caso, poiché è uno dei client più attivamente sviluppati.
Marc Bollinger,

Concordato. La dipendenza esterna libmemcached non deve essere considerata come un problema, come in libevent.
Miha Hribar,

1
Quella cosa Cas Tokens suona come il più grande vantaggio. In realtà, esaminando queste funzionalità sembra quasi che memcached si stia dirigendo più verso un supporto dati gestito, come un DB, e meno come una cache temporanea.
Xeoncross,

Se stai cercando che hai già memcachedb ( memcachedb.org ) che in realtà è solo un DB Berkley che parla il protocollo memcached.
Miha Hribar,

8
questa risposta non dice nemmeno la differenza tra memcache e memcached ?! memcache è solo la versione precedente di memcached?
Daniel W.

10

Quando si utilizza Windows, il confronto viene interrotto: memcachesembra essere l'unico client disponibile.


Non potresti sempre aggiungere l' memcachedestensione in te stesso?
Pacerier,

1
Non sembra che questo sia effettivamente vero. commaster.net/content/installing-memcached-windows
Joe Leonard

@JoeLeonard dalla pagina a cui ti colleghi: "Per interfacciarti con memcachedPHP, devi installare l' memcacheestensione per PHP"
rymo

8

Questo è il 2013. Dimentica i commenti del 2009. Allo stesso modo, se stai eseguendo seri carichi di traffico, non pensare nemmeno a come fare con un memcache basato su Windows. Quando si ha a che fare con una scala molto grande (oltre 500 server Web front-end) e oltre 20 server e replicatori di database back-end (mysql e mssql mix), una farm di server memcached (12 server nel gruppo) supporta più applicazioni OLTP ad alto volume che rispondono a 25K ~ 40K mc-> ricevi chiamate al secondo. Queste chiamate sono quelle che NON devono raggiungere un database.

IMHO, questo uso di memcached ha fornito SERIOUS $$$, $$$ risparmi su CAPEX per nuovi server DB e licenze, nonché su contratti di supporto per grandi progetti commerciali.


48
In che modo questo risponde alla domanda sulle differenze tra quelle 2 implementazioni del protocollo memcache in php?
Marki555,

9
Questo dovrebbe essere un commento.
Elijah Lynn,

7

Memcached è un'API più recente, inoltre fornisce memcached come provider di sessione che potrebbe essere ottimo se si dispone di una farm di server.

Dopo che la versione è ancora molto bassa, 0,2, ma ho usato entrambi e non ho riscontrato grossi problemi, quindi passerei a memcached dato che è nuovo.


1
Entrambi funzionano come gestori di sessioni anche se non vorrei mai usarli per questo. us3.php.net/manual/en/memcache.examples-overview.php
Xeoncross,

bene cattivi i miei cattivi, sì, è davvero utile su server di grandi dimensioni quando io divento davvero importante, inoltre memcache non conferma che non lascerà cadere alcun oggetto per ottenere memoria così difficile da sapere come ridimensionare le cose.
RageZ,

1
Da allora la versione 0.2 è stata superata da una versione 1.0.0 stabile.
Miha Hribar,
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.