Redis och MongoDB kan användas tillsammans med bra resultat. Ett företag som är välkänt för att köra MongoDB och Redis (tillsammans med MySQL och Sphinx) är Craiglist. Se den här presentationen från Jeremy Zawodny.
MongoDB är intressant för beständig, dokumentorienterad, data indexerad på olika sätt. Redis är mer intressant för flyktiga data, eller latenskänsliga semi-persistent data.
Här är några exempel på konkret användning av Redis ovanpå MongoDB.
-
Pre-2.2 MongoDB har ännu ingen utgångsmekanism. Begränsade samlingar kan inte riktigt användas för att implementera en riktig TTL. Redis har en TTL-baserad utgångsmekanism, vilket gör det bekvämt att lagra flyktig data. Till exempel lagras användarsessioner vanligtvis i Redis, medan användardata kommer att lagras och indexeras i MongoDB. Observera att MongoDB 2.2 har introducerat en utgångsmekanism med låg noggrannhet på insamlingsnivå (att användas för att rensa data till exempel).
-
Redis tillhandahåller en bekväm uppsättningsdatatyp och dess associerade operationer (union, korsning, skillnad på flera uppsättningar, etc ...). Det är ganska enkelt att implementera en grundläggande facetterad sök- eller taggningsmotor ovanpå denna funktion, som är ett intressant tillägg till MongoDBs mer traditionella indexeringsmöjligheter.
-
Redis stöder effektiv blockering av popoperationer på listor. Detta kan användas för att implementera ett ad-hoc distribuerat kösystem. Det är mer flexibelt än MongoDB tailable cursors IMO, eftersom en backend-applikation kan lyssna på flera köer med en timeout, överföra objekt till en annan kö atomärt, etc ... Om applikationen kräver lite kö, är det vettigt att lagra kön i Redis , och behåll de beständiga funktionella data i MongoDB.
-
Redis erbjuder också en pub/sub-mekanism. I en distribuerad applikation kan ett händelseutbredningssystem vara användbart. Detta är återigen ett utmärkt användningsfall för Redis, medan de beständiga data hålls i MongoDB.
Eftersom det är mycket lättare att designa en datamodell med MongoDB än med Redis (Redis är mer lågnivå), är det intressant att dra nytta av flexibiliteten hos MongoDB för beständiga huvudsakliga data och från de extra funktioner som Redis tillhandahåller (låg latens , utgångsdatum för föremål, köer, pub/sub, atomblock, etc ...). Det är verkligen en bra kombination.
Observera att du aldrig bör köra en Redis- och MongoDB-server på samma maskin. MongoDB-minne är designat för att bytas ut, Redis är det inte. Om MongoDB utlöser någon bytesaktivitet kommer Redis prestanda att bli katastrofal. De bör isoleras på olika noder.