Redis cache vs utilizzo diretto della memoria


142

Non ho ancora usato Redis, ma ne ho sentito parlare e ho intenzione di provarlo come memoria cache.

Ho sentito Redis usare la memoria come database dell'archivio cache, quindi qual è la differenza se uso una variabile come oggetto o tipo di dati del dizionario per archiviare i dati? piace:

var cache = {
    key: {

    },
    key: {

    }
    ...
}

Qual è il vantaggio di Redis?

Risposte:


222

Redis è una remota di server struttura di dati. È certamente più lento della semplice memorizzazione dei dati nella memoria locale (poiché comporta il round trip del socket per recuperare / archiviare i dati). Tuttavia, porta anche alcune proprietà interessanti:

  • Redis è accessibile da tutti i processi delle tue applicazioni, possibilmente in esecuzione su più nodi (qualcosa che la memoria locale non può raggiungere).

  • La memoria Redis è abbastanza efficiente e viene eseguita in un processo separato. Se l'applicazione viene eseguita su una piattaforma la cui memoria è garbage collection (node.js, java, ecc ...), consente di gestire una cache / archivio di memoria molto più grande. In pratica, cumuli molto grandi non funzionano bene con le lingue raccolte con immondizia.

  • Redis può persistere i dati sul disco, se necessario.

  • Redis è un po 'più di una semplice cache: fornisce varie strutture di dati, varie politiche di sfratto degli oggetti, code di blocco, pub / sub, atomicità, script Lua, ecc ...

  • Redis può replicare la sua attività con un meccanismo master / slave al fine di implementare l'alta disponibilità.

Fondamentalmente, se hai bisogno che la tua applicazione si ridimensioni su più nodi che condividono gli stessi dati, allora sarà necessario qualcosa come Redis (o qualsiasi altro archivio di chiavi / valori remoto).


5
Il tuo ultimo punto in particolare fa sembrare che cose come Rlite siano un po 'inutili: un negozio di dizionari sarebbe altrettanto adatto nella maggior parte dei casi d'uso in cui hai un singolo processo. È giusto?
naught101

1
Sì. IMO l'interesse di Rlite è piuttosto limitato.
Didier Spezia,

grazie per questi suggerimenti, quindi Redis è ottimo per scalare ma suppongo che nel caso di una semplice chat'app con in media 300 - 500 oggetti da recuperare in memoria, la struttura dei dati in memoria farà il lavoro molto bene se non più veloce di questi sono piccoli numeri?
Webwoman

2
@DidierSpezia very large heaps do not perform well with garbage collected languagespuoi spiegare perché?
roottraveller,

1
@roottraveller, credo che ciò sia dovuto al fatto che il processo di garbage collection deve generalmente interrompere l'esecuzione dell'applicazione ("stop-the-world") per liberare memoria dell'heap e più grande è l'heap, più a lungo dura questa interruzione.
Regorsmitz,

3

Attualmente siamo più attratti dall'architettura del server, in cui ogni richiesta può andare in container diversi, in questo caso i redis possono svolgere un ruolo molto importante.

Non possiamo usare la cache semplice nel server meno perché non possiamo essere sicuri che la nostra richiesta venga servita nello stesso contenitore in cui è memorizzata la nostra cache semplice.

In questo caso, dobbiamo usare redis in quanto memorizza la cache in posizione remota e possiamo accedere anche ai cambiamenti dei container nell'architettura del server.

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.