memcache vs memcached?


76

Voglio usare memcached

http://www.danga.com/memcached/

L'ho installato tramite yum install memcached

Ma ora ho bisogno di connettermi a PHP, e c'è un'estensione chiamata memcache e una chiamata memcached? ARGH

http://us3.php.net/manual/en/book.memcache.php
http://us3.php.net/manual/en/book.memcached.php

Qualcuno potrebbe indicarmi la giusta direzione qui ... quale funzionerà?

Inoltre, devo aprire le porte affinché funzioni anche se è locale? Dopo averlo eseguito, provo telnet 127.0.0.1 11211 e mi viene rifiutata la connessione.


24
Se stai esaminando questa domanda ora, tieni presente che la risposta accettata è errata . Scegliere una soluzione basata esclusivamente sul nome è pericoloso, in particolare quando quello con il nome migliore è un progetto peggiore. Si prega di guardare le altre risposte per ulteriori informazioni.
tylerl,

@thanksyo deseleziona la risposta che hai controllato. Ciò confonderà solo più persone che verranno qui tardi. Nel frattempo, ho declassato la risposta errata e suggerisco ad altri di fare lo stesso fino a quando grazie non si spegne per deselezionarla.
joedevon,

Risposte:


24

La risposta breve: uno dei due è quello che stai cercando, ma la mia prima scelta sarebbe memcache (il primo che hai elencato), basato esclusivamente sul suo uso corretto della nomenclatura.

Ora ecco come sono arrivato a questa conclusione:

Ecco un rapido background delle convenzioni di denominazione (per chi non ha familiarità), il che spiega la frustrazione della domanda: Per molte applicazioni * nix, il pezzo che fa il lavoro di backend è chiamato "demone" (pensa "servizio" in Windows- terra), mentre l'interfaccia o l'applicazione client è ciò che usi per controllare o accedere al demone. Il demone viene spesso chiamato come il client, con la lettera "d" ad esso aggiunta. Ad esempio "imap" sarebbe un client che si collega al demone "imapd".

Questa convenzione di denominazione viene chiaramente rispettata da memcache quando leggi l' introduzione al modulo memcache (nota la distinzione tra memcache e memcached in questo estratto):

Il modulo Memcache fornisce una comoda interfaccia procedurale e orientata agli oggetti per il demone memorizzato nella cache, altamente efficace, che è stato appositamente progettato per ridurre il carico del database in applicazioni Web dinamiche.

Il modulo Memcache fornisce anche un gestore di sessioni (memcache).

Ulteriori informazioni su memcached sono disponibili su » http://www.danga.com/memcached/ .

La frustrazione qui è causata dall'autore dell'estensione PHP che è stata malamente chiamata memcached , poiché condivide lo stesso nome del demone reale chiamato memcached . Si noti inoltre che nell'introduzione a memcached (il modulo php) , si fa riferimento a libmemcached , che è la libreria condivisa (o API) che viene utilizzata dal modulo per accedere al demone memcached:

memcached è un sistema di memorizzazione nella cache degli oggetti di memoria distribuito ad alte prestazioni, di natura generica, ma destinato all'uso per accelerare le applicazioni Web dinamiche riducendo il carico del database.

Questa estensione usa la libreria libmemcached per fornire API per comunicare con i server memcached. Fornisce inoltre un gestore di sessioni (memcached).

Informazioni su libmemcached sono disponibili all'indirizzo » http://tangent.org/552/libmemcached.html .

In sintesi, entrambi sono funzionalmente uguali, ma hanno semplicemente autori diversi e l'uno è semplicemente nominato in modo più appropriato dell'altro.


70
Il nome del progetto è davvero un motivo appropriato per scegliere un'implementazione rispetto all'altra?
David Pashley,

4
David: Non del tutto ... ma è certamente un motivo sufficiente per lasciare una particolare implementazione fino all'ultimo dei miei test, dando così in modo efficace la preferenza agli altri. Molto probabilmente proverei ancora tutte le implementazioni disponibili, ma i difetti tecnici nelle descrizioni del software dell'autore tendono a farmi riflettere su quali difetti tecnici potrebbero risiedere nel software. Ho letto il tuo commento sull'attuale software, quindi ti ho dato un voto anche per la tua risposta. :-)
Jessica McKinnon,

4
Non ho mai pensato che la "d" in memcached significasse deamon ma significasse il participio passato della verbo cache. Inoltre, non è possibile nominare la nuova interfaccia come "memcache" poiché ne esisteva già una con quel nome.
GetFree,

9
La quantità di bug e se l'estensione è sviluppata attivamente è molto più importante dell'essere ansiosi della problematica d. Scherzi a parte, non dovresti nemmeno pensare di testare un'estensione per ultimo a causa di qualcosa del genere, è completamente fuori dal comune
Fake51

12
Ehm, entrambi non sono funzionalmente uguali: memcachedsupporta cas token ad esempio, memcacheno. Se ne hai bisogno, sai quale (mal nominato) scegliere.
Wrikken,

56

Probabilmente vuoi vedere il Confronto client PHP .

Versione breve: funzioneranno entrambi, e nella maggior parte dei casi uno dei due funzionerà bene.

Per quanto riguarda l'altro problema: Sì, dovresti essere in grado di farlo telnet 127.0.0.1 11211. Pochissimi firewall impedirebbero a localhost di comunicare con se stesso. Se non riesci a connetterti, verifica che memcached sia realmente in esecuzione facendo ps auxwww | grep memcached, che ti mostrerà anche gli argomenti della riga di comando usati per avviare memcached. Uno degli argomenti dovrebbe essere -p 11211o un altro numero di porta. Vedi man memcachedper il significato di tutti i possibili argomenti.


2
Upgrade per l'aggiunta di alcuni passaggi per la risoluzione dei problemi.
Jessica McKinnon,

Questa è davvero la risposta chiara.
danidacar,

@Nate, qual è l'equivalente di Windows ps auxwww | grep memcached?
Pacerier,

1
@Pacerier: dai un'occhiata a superuser.com/questions/415360/… . Process Explorer è il modo più semplice per trovare un processo in esecuzione e vedere i suoi argomenti della riga di comando.
Nate,

@Pacerier quel comando controlla se il processo del server è in esecuzione e vede come è stato invocato.
Jasen,

27

Come suggerisce il link di Nate, entrambi funzionano perfettamente per un semplice utilizzo. Tuttavia, memcached supporta più funzionalità che consentono di ottenere il massimo dalle prestazioni di memcached. Il protocollo binario riduce la quantità di dati necessari per l'invio tra client e server. Multiget e multiset ti consentono di ottenere / impostare più elementi contemporaneamente. Se trovi che hai bisogno di più grinta da memcache, memcached è il modulo migliore. L'uso di libmemcached suggerisce che la libreria stessa è probabilmente più ottimizzata rispetto alla sola versione di PHP.

Memcached è un modulo più recente rispetto a memcache, essendo stato rilasciato solo 8 mesi fa. Se hai bisogno di scegliere come target una versione precedente di PHP, puoi solo usare memcache.


Grande spiegazione!
Giovanni,

21

Il più vecchio, più forte è chiamato php-memcacheperché quello sembrava il nome più appropriato. La nuova versione migliore sviluppata in modo indipendente dalla gente di Digg è stata invece nominata php-memcachednell'interesse della chiarimento delle ambiguità.

Le persone che ti raccomandano di sceglierle l'una sull'altra basandosi esclusivamente sulla correttezza del nome non hanno davvero alcuna attività di consulenza tecnica.


6

Avendo usato php-memcache di recente, dovrei indirizzarti a php-memcached.

Ecco un paio di ragioni dalla parte superiore della mia testa ..

1) Non c'è getErrorCode () o un metodo equivalente, quindi se get () restituisce FALSE, non avrai idea se ciò sia dovuto al fatto che il valore memorizzato in memcache È falso o se si è verificato un problema di qualche tipo.

2) Il suo algoritmo di hashing per l'hash coerente sembra differire da altre implementazioni, come le numerose librerie client costruite con libmemcached. Ciò significa che se si desidera utilizzare lo stesso cluster memcache con più lingue, probabilmente si avranno problemi in cui si memorizzerà un valore con il client PHP e altri client non lo troveranno.


3

Entrambi hanno problemi ad oggi. PECL / memcache è vecchio e affidabile, con alcune eccezioni in cui è obsoleto. PECL / memcached 1.x è nella migliore delle ipotesi beta. Alcune funzioni non hanno a che fare con i tasti numerici, perdono le connessioni quando si usano connessioni permanenti. Alcuni (tutti?) Sono stati corretti in GitHub e verranno rilasciati a un certo punto in 2.x, ma non oggi. Per una recensione più dettagliata consultare http://brian.moonspot.net/php-memcached-issues


PECL / memcached 1.x è ora stabile; PECL / memcache 2.x è limitato; PECL / memcache 3.x è altamente instabile.
Aredridel,

2

Sto lavorando a un libro "Expert PHP e MySQL". Ho scritto praticamente la stessa cosa sulle differenze. Quello che ho raccomandato era PECL / memcached. # 1 - avvolge una libreria C # 2 ben funzionante con tutte le funzionalità - è stato recentemente mantenuto. # 3 - più funzionalità. Nessuna denigrazione verso PECL / memcache.


0

Ho avuto alcuni problemi piuttosto gravi con Drupal 6 e php-pecl-memcached in cui i tempi di risposta sono stati ritardati fino a 5ms per chiamata e causerebbero un sito in particolare per creare 5 volte più chiamate rispetto a prima della modifica a php-pecl-memcached . Il passaggio a php-pecl-memcache ha risolto tutti i problemi; latenza e chiamate extra.

Questa risposta è qui solo per aiutare coloro che usano Drupal 6 e possibilmente Drupal 7.


-3
  • memcache è un client di memcached (il server)
  • libmemcached è anche un client per memcached

E ci sono altri client per memcached, vedi http://code.google.com/p/memcached/wiki/Clients

Taglia e incolla dal Web:

http://www.php.net/manual/en/intro.memcache.php

  Memcache module provides handy procedural and object oriented 
  interface to memcached, highly effective caching daemon, which was 
  especially designed to decrease database load in dynamic web applications.
The Memcache module also provides a session handler (memcache).
More information about memcached can be found at » www.memcached.org 

http://www.php.net/manual/en/intro.memcached.php

   » memcached (http://www_memcached_org/) is a high-performance, distributed 
  memory object caching system, generic in nature, but intended for use in 
  speeding up dynamic web applications by alleviating database load.
  This extension uses libmemcached library to provide API for communicating with
  memcached servers. It also provides a session handler (memcached).
  Information about libmemcached can be found at 
   » tangent.org/552/libmemcached.html

http://pecl.php.net/package/memcached "Estensione PHP per l'interfacciamento con memcached tramite libreria libmemcached" Questa estensione utilizza la libreria libmemcached per fornire API per comunicare con i server memcached. https://github.com/andreiz/php-memcached

http://pecl.php.net/package/memcache "estensione memcached" Memcached è un demone di memorizzazione nella cache progettato appositamente per applicazioni Web dinamiche per ridurre il carico del database memorizzando oggetti in memoria. Questa estensione consente di lavorare con memcached tramite OO e interfacce procedurali.

http://code.google.com/p/memcached/wiki/PHPClientComparison

                        pecl/memcache      pecl/memcached
  First Release Date      2004-06-08         2009-01-29 (beta)
  Actively Developed?     Yes                    Yes
  External Dependency     None              libmemcached

6
Questa risposta prolissa non si avvicina nemmeno a chiarire le cose per il poster. Il mittente è già consapevole che ci sono più clienti. Elencarli e proporre nomi alternativi non semplifica la scelta di quello giusto.
Martijn Heemels,
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.