2012-06-18 15 views
20

Sto usando Dalli fino ad ora per il caching e oggi mi sono imbattuto in Redis -Store.Dalli vs Redis-Store per Rails App

Mi chiedo se debba passare a redisstore. La mia app usa già dei redis per alcune cose, quindi ho un server redis che è abbastanza grande (in termini di risorse) e ho anche un altro server memcached. Quindi se io dovessi passare a redis-store significherebbe che posso rimuovere il server memcached (meno server per mantenere + meno costi).

Qualcuno ha fatto un confronto di queste 2 soluzioni.

  1. prestazioni
  2. E 'un rimpiazzo (posso passare tra questi 2 in qualsiasi momento senza modifica del codice)
  3. Tutta quella roba che dovrei sapere.

risposta

19

I redis possono essere utilizzati come cache o come archivio permanente, ma se si tenta di combinarli entrambi, si può finire per avere "problemi interessanti".

Quando hai memcached, hai una quantità massima di memoria per il processo, quindi quando memcached si riempie rimuoverà automaticamente le voci usate meno di recente per fare spazio alle nuove voci.

È possibile configurare Redis per avere questo comportamento, ma non si vuole farlo se si utilizza Redis per l'archiviazione persistente, perché in tal caso si rischia di perdere le chiavi che sono destinate a essere persistenti.

Quindi, se si utilizza la memoria persistente per Redis, è necessario disporre di due diversi processi Redis: uno per le chiavi persistenti e uno per la memorizzazione nella cache. Ovviamente si potrebbe sempre avere un solo processo e impostare i tempi di scadenza per ogni elemento della cache, ma nessuno ti assicurerebbe di non raggiungere il limite di memoria prima della scadenza e di perdere dati, quindi nella pratica avresti bisogno di due processi. Inoltre, se si imposta una configurazione master/slave per i dati persistenti e si memorizza la cache sullo stesso server, si sta praticamente sprecando RAM, quindi i processi separati sono la strada da percorrere.

Per quanto riguarda le prestazioni, sia redis che memcached sono MOLTO performanti e su diversi test si trovano nello stesso intervallo quando si tratta di ottenere/estrarre dati, ma memcached è migliore quando è necessaria solo una cache.

Perché è così? Prima di tutto, dato che memcached ha solo una missione, che sta memorizzando chiavi/valori, non ha alcun sovraccarico quando si tratta di archiviare i metadati. Redis d'altra parte offre diverse strutture di dati, quindi memorizza più metadati che ogni chiave. Un esempio di questo: è molto più economico memorizzare i dati su un hash in Redis invece di usare chiavi individuali. Non si ottiene nulla di ciò su memcached, poiché esiste un solo tipo di dati. Questo significa che con la stessa quantità di memoria nei tuoi server puoi memorizzare più dati su memcached che su redis. Se hai un'installazione relativamente piccola, non ti interessa davvero, ma nel momento in cui inizi a vedere una crescita, credimi, vorrai tenere quei dati sotto controllo.

Quindi, per quanto mi piaccia Redis, preferisco avere memcached per i miei bisogni di cache e redis per le mie esigenze persistenti di archiviazione/memorizzazione temporanea/coda. Uso ancora redis come "cache" ma non temporaneo con scadenza, ma come cache di ricerca per salvare la lettura da una memoria più costosa. Ad esempio, tengo una mappatura tra ID utente e nickname su Redis. Non faccio mai scadere queste mappature, quindi Redis è un posto perfetto per questo.

Nel caso in cui si tratti di una piccola quantità di dati, potrebbe avere senso l'idea di avere un'unica tecnologia per tutto, ma nel momento in cui inizi a crescere di qualche centinaia di MB, direi di andare con entrambi.