sviluppo-web-qa.it

memcache vs memcached?

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.

76
thanksyo

La risposta breve: uno dei due è quello che stai cercando, ma la mia prima scelta sarebbe memcache (il primo che hai elencato), puramente basato 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à), 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 connette al demone "imapd".

Questa convenzione di denominazione è chiaramente rispettata da memcache quando leggi l'introduzione nel modulo memcache (notare 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 mal denominata memcached , poiché condivide lo stesso nome come il demone effettivo chiamato memcached . Nota anche che nell'introduzione a memcached (il modulo php) , fa riferimento a libmemcached , che è la libreria condivisa (o API) 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 su " http://tangent.org/552/libmemcached.html .

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

24

Probabilmente vuoi vedere PHP Client Comparison .

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 fare 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 eseguendo ps auxwww | grep memcached, che mostrerà anche gli argomenti della riga di comando utilizzati per avviare memcached. Uno degli argomenti dovrebbe essere -p 11211 o un altro numero di porta. Vedi man memcached per il significato di tutti i possibili argomenti.

57
Nate

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 della versione 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.

28
David Pashley

Il più vecchio, più robusto si chiama php-memcache perché sembrava il nome più appropriato. La versione più recente e migliore sviluppata in modo indipendente dalla gente di Digg è stata invece chiamata php-memcached nell'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.

21
tylerl

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 questo è perché il valore memorizzato in memcache IS false, o se ci fosse 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, è probabile che si verifichino problemi in cui si memorizzerà un valore con il client PHP e altri client non lo troveranno .

6
user25576

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 vedere http://brian.moonspot.net/php-memcached-issues

3
Brian Moon

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 tutto libreria C # 2 ben funzionante - è stata mantenuta più di recente. # 3 - più funzionalità. Nessun disprezzo per PECL/memcache.

2
CaptTofu

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 determinato sito per creare 5 volte più chiamate di prima della modifica a php-pecl-memcached. La modifica 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.

0
Spechal