Redis e MongoDB possono essere utilizzati insieme con buoni risultati. Un'azienda nota per l'esecuzione di MongoDB e Redis (insieme a MySQL e Sphinx) è Craiglist. Guarda questa presentazione di Jeremy Zawodny.
MongoDB è interessante per dati persistenti, orientati ai documenti, indicizzati in vari modi. Redis è più interessante per i dati volatili o per i dati semipersistenti sensibili alla latenza.
Ecco alcuni esempi di utilizzo concreto di Redis su MongoDB.
-
Pre-2.2 MongoDB non ha ancora un meccanismo di scadenza. Le raccolte limitate non possono davvero essere utilizzate per implementare un vero TTL. Redis ha un meccanismo di scadenza basato su TTL, che rende conveniente archiviare dati volatili. Ad esempio, le sessioni utente vengono comunemente archiviate in Redis, mentre i dati utente verranno archiviati e indicizzati in MongoDB. Si noti che MongoDB 2.2 ha introdotto un meccanismo di scadenza a bassa precisione a livello di raccolta (da utilizzare ad esempio per eliminare i dati).
-
Redis fornisce un tipo di dati di insieme conveniente e le sue operazioni associate (unione, intersezione, differenza su più insiemi, ecc ...). È abbastanza facile implementare una ricerca sfaccettata di base o un motore di tagging su questa funzionalità, che è un'interessante aggiunta alle funzionalità di indicizzazione più tradizionali di MongoDB.
-
Redis supporta operazioni pop di blocco efficienti sugli elenchi. Questo può essere utilizzato per implementare un sistema di accodamento distribuito ad hoc. È più flessibile dei cursori a coda MongoDB IMO, poiché un'applicazione back-end può ascoltare diverse code con un timeout, trasferire elementi in un'altra coda in modo atomico, ecc ... Se l'applicazione richiede un po 'di accodamento, ha senso archiviare la coda in Redis e mantieni i dati funzionali persistenti in MongoDB.
-
Redis offre anche un meccanismo pub/sub. In un'applicazione distribuita, può essere utile un sistema di propagazione degli eventi. Anche questo è un eccellente caso d'uso per Redis, mentre i dati persistenti sono mantenuti in MongoDB.
Poiché è molto più semplice progettare un modello di dati con MongoDB che con Redis (Redis è più di basso livello), è interessante beneficiare della flessibilità di MongoDB per i dati persistenti principali e delle funzionalità extra fornite da Redis (bassa latenza , scadenza articolo, code, pub/sub, blocchi atomici, ecc...). È davvero una buona combinazione.
Tieni presente che non dovresti mai eseguire un server Redis e MongoDB sulla stessa macchina. La memoria MongoDB è progettata per essere sostituita, Redis no. Se MongoDB attiva alcune attività di scambio, le prestazioni di Redis saranno catastrofiche. Dovrebbero essere isolati su nodi diversi.