Memcached è un dinosauro rispetto a Redis? [chiuso]


185

Ho lavorato parecchio con memcached nelle ultime settimane e ho appena scoperto Redis. Quando ho letto questa parte del loro readme, improvvisamente ho avuto una sensazione calda e accogliente nel mio stomaco:

Redis può essere usato come memcached sugli steroidi perché è veloce come memcached ma con un numero di funzionalità in più. Come memcached, Redis supporta anche l'impostazione dei timeout per le chiavi in ​​modo che questa chiave venga automaticamente rimossa quando passa un determinato periodo di tempo.

Sembra fantastico. Ho anche trovato questa pagina con benchmark: http://www.ruturaj.net/redis-memcached-tokyo-tyrant-mysql-comparison

Quindi, onestamente - memcache è davvero quel vecchio dinosauro che è una cattiva scelta dal punto di vista delle prestazioni rispetto a questo nuovo arrivato chiamato Redis?

Non ho sentito molto su Redis in precedenza, quindi l'approccio alla mia domanda!



9
questo benchmark ruturaj non merita davvero molta attenzione
dsomnus il

2
Abbiamo iniziato a sperimentare w / Membase al lavoro e finora siamo felici. Tuttavia, veniamo da Memcache, quindi avere un calo nella sostituzione è stato un bel vantaggio: membase.org
jayshao

2
Redis è veloce quanto memorizzato nella cache per benchmark non elaborati nel mondo reale. Ciò non significa che sia lento - è certamente abbastanza veloce per la maggior parte dei carichi di lavoro, ma le cose più veloci di memcached rivelano solo bug in memcached. È quasi sempre strozzato dall'hardware o dal design di un'applicazione scadente.
Dustin,

4
Sono sorpreso che la santità della pattuglia SO non abbia chiuso questa domanda come non appropriata e non utile.
Dogweather,

Risposte:


74

Memcache è ancora uno strumento eccellente e MOLTO affidabile.

invece di esaminare questo problema dal punto di vista di chi è più veloce nell'intervallo <100 ms, guarda le prestazioni per "classe" del software.

  • Usa solo ram locale? -> più veloce
  • Usa la ram remota? -> veloce
  • Usa ram plus hardddisk -> oh hurm.
  • Usa solo hard disk -> esegui!

3
Non è possibile gestire la replica con memcache di cui sono a conoscenza. Memcache è puramente pensato per essere una cache. Se l'oggetto viene eliminato / perso, è necessario ricostruirlo. Non l'ho mai usato prima né l'ho valutato, ma questo potrebbe interessarti. code.google.com/p/memagent
Daniel,

1
L'appartenenza supporta il protocollo memcached ma anche persistenza e replica.
Jim Ferrans,

1
Di recente ho visto Ethernet collegata, su 4 porte. 4 x 44 MB / s. Questo rende la ram ancora più preziosa, supponendo che tu possa ottenere ethernet bonded andando!
Daniel,

1
Per motivi di futuro riferimento, mcrouter open source di Facebook di recente, che aggiunge la replica a memcached. Anche altre cose sono datate (redis è super veloce ora, ecc.), FYI se sei qui cinque anni dopo ...
dannysauer,

bene qual è il punto? entrambi non posso archiviare direttamente un semplice array json, il formato di interscambio di DATI più ampiamente usato sul web, non ho idea di cosa stessero pensando ... oh aspetta forse dovrei aggiungere ReJSON perché nativamente a nessuno importa di JSON nel mondo giusto
PirateApp,

205

Dipende da ciò di cui hai bisogno, in generale penso che:

  • Non dovresti preoccuparti troppo delle esibizioni. Redis è più veloce per core con valori piccoli, ma memcached è in grado di utilizzare più core con un singolo eseguibile e porta TCP senza l'aiuto del client. Anche memcached è più veloce con grandi valori nell'ordine di 100k. Recentemente Redis ha migliorato molto i valori di grandi dimensioni (ramo instabile) ma ancora memcached è più veloce in questo caso d'uso. Il punto qui è: né l'uno né l'altro saranno probabilmente il collo di bottiglia per la query al secondo che possono fornire.
  • Dovresti preoccuparti dell'utilizzo della memoria. Per semplici coppie chiave-valore memcached è più efficiente in termini di memoria. Se usi gli hash Redis, Redis è più efficiente in termini di memoria. Dipende dal caso d'uso.
  • Dovresti preoccuparti della persistenza e della replica, due funzionalità disponibili solo in Redis. Anche se il tuo obiettivo è quello di creare una cache, è utile che dopo un aggiornamento o un riavvio i tuoi dati siano ancora lì.
  • Dovresti preoccuparti del tipo di operazioni di cui hai bisogno. In Redis ci sono molte operazioni complesse, anche solo considerando il caso d'uso della cache, spesso si può fare molto di più in una singola operazione, senza richiedere l'elaborazione dei dati sul lato client (a volte è necessario un sacco di I / O). Queste operazioni sono spesso veloci come il semplice GET e SET. Quindi, se non hai bisogno solo di GET / SET, ma di cose più complesse, Redis può essere di grande aiuto (pensa alla memorizzazione nella sequenza temporale).

Senza un caso d'uso è difficile scegliere subito, ma penso che per molte cose Redis abbia senso dal momento che anche quando non vuoi usarlo come DB, essendo molto più capace puoi risolvere più problemi, non solo memorizzazione nella cache, ma anche messaggistica, classificazione e così via.

Ps ovviamente potrei essere di parte poiché sono lo sviluppatore principale del progetto Redis.


67
+1 per la grande divulgazione alla fine
NateDSaint,

6
Non sono sicuro che si tratti di un errore linguistico, ma se conduci la tua discussione con "in generale penso che non dovresti preoccuparti troppo delle prestazioni", questo è un serio motivo di preoccupazione. Redis può essere ottimo per alcune classi di problemi, ma, tradizionalmente, memcache è stato utilizzato specificamente per risolvere problemi di prestazioni con database persistenti. Penso anche che un'evidente omissione dall'elenco sia la maturità del prodotto. Memcache è un prodotto maturo con circa un decennio di esperienza. Redis è promettente, ma esiste da circa 3 anni.
DougW,

1
@DougW Stai prendendo questa frase fuori contesto. Ha molto più senso leggere la frase che chiude il paragrafo subito dopo: "Il punto qui è: né l'uno né l'altro saranno probabilmente il tuo collo di bottiglia per la query al secondo che possono fornire"
Dinei,

83

Quindi, onestamente - memcache è davvero quel vecchio dinosauro che è una cattiva scelta dal punto di vista delle prestazioni rispetto a questo nuovo arrivato chiamato Redis?

  • Confrontare le funzionalità impostate Redisha quindi molte più funzionalità;
  • Anche confrontare la facilità di installazione Redisè molto più semplice. Nessuna dipendenza richiesta;
  • Anche il confronto dello sviluppo attivo Redisè migliore;
  • Credo che memcachedsia un po 'più veloce di Redis. Non tocca affatto il disco;
  • La mia opinione è che Redisè un prodotto migliore di memcached.

31
redis tocca il disco solo se lo dici a. Di solito, fa una sincronizzazione ogni due secondi circa -> non lo noterai
Marc Seeger,

1
@Marc yup. Credo anche che si possa dire di non toccare affatto il disco, ma standard credo che si sincronizzi sempre in questo momento?
Alfred,

3
Inoltre, nella mia esperienza, Redis è un po 'più veloce di Memcached (quando si utilizza Redis in modalità solo memoria). Antirez ha fatto un test qui antirez.com/post/redis-memcached-benchmark.html
Sune Rievers

10
GRANDE DIFFERENZA: Memcached è multi-thread e Redis no. Pertanto, mentre la latenza di una singola richiesta è comparabile, Memcached può soddisfare molte più richieste quando la concorrenza è elevata. D'altra parte Redis raggiungerà il suo picco di prestazioni con solo alcune richieste simultanee poiché utilizza solo 1 core / thread cpu. Il metodo suggerito per aggirare questo problema consiste nell'eseguire più istanze di Redis su una macchina con hashing coerente, ma questa è una soluzione davvero scadente. Quindi, se hai bisogno di alta concorrenza e hai una CPU multi-core (chi non lo fa), Memcached è MOLTO più veloce.
ColinM,

2
@Alfred, non è un fatto nascosto che Redis sia a thread singolo, è una decisione di progettazione (semplicità piuttosto che robustezza) dell'autore. L'articolo di Dustin collegato sopra è una prova concreta che ha un impatto reale. Inoltre ho confermato questo nei miei benchmark usando Redis come backend di Zend_Cache; all'aumentare della concorrenza, Redis si posizionerà piuttosto rapidamente rispetto a memcached.
ColinM,

46

Quello che fa Memcached che Redis non fa è lo sfratto dei valori usato di recente dalla cache. Con memcached, puoi tranquillamente impostare tutti i valori che desideri e quando traboccano di memoria, quelli che non hai usato di recente verranno eliminati. Con Redis, puoi solo approssimarlo, impostando un timeout su tutto; quando deve liberare memoria, esaminerà tre chiavi casuali ed eliminerà quella più vicina alla scadenza.

Questa è la differenza principale, se la stai semplicemente usando come cache.



13

Potresti anche voler dare un'occhiata a Membase.

http://www.northscale.com/products/membase_server.html

Non l'ho usato, ma sembra essere simile a Redis in quanto è un archivio KV incentrato sulla memoria con persistenza. Le principali differenze da quello che posso vedere sono:

  • Redis ha significativamente più capacità di manipolazione dei dati (set ordinati, ecc.)
  • Redis ha un progetto Redis Cluster in sospeso per aggiungere scalabilità orizzontale
  • Redis ha un unico livello di offload dei dati su disco (VM) basato su un algoritmo ibrido che considera sia LRU che le dimensioni dell'oggetto.

  • L'appartenenza utilizza il protocollo wire memcached, utile come percorso di aggiornamento per le applicazioni esistenti

  • L'appartenenza è impostata per ridimensionare orizzontalmente utilizzando un approccio hashtable distribuito
  • L'appartenenza può supportare più livelli di offload dei dati utilizzando un approccio LRU (molto raramente utilizzato su disco, un po 'raramente roba su SSD, roba frequente rimane nella RAM)
  • Non sono sicuro della funzionalità TTL in Membase.

La scelta potrebbe dipendere dal grado in cui l'applicazione può sfruttare la funzionalità aggiuntiva di manipolazione dei dati in Redis.


Ciao Dean, grazie per il tuo post. Di certo ci darò un'occhiata. Posso usare Membase in PHP?
Industriale

4
Poiché Membase utilizza il protocollo memcached, tutti i client memcached dovrebbero funzionare: wiki.membase.org/bin/view/Main/Clients
HikeOnPast

L'appartenenza supporta TTL. Il supporto di tutte le implementazioni di Memcache prevede un tempo di scadenza. github.com/memcached/memcached/blob/master/doc/protocol.txt#L79
Saurav

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.