Redis e MongoDB podem ser usados juntos com bons resultados. Uma empresa conhecida por rodar MongoDB e Redis (junto com MySQL e Sphinx) é a Craiglist. Veja esta apresentação de Jeremy Zawodny.
O MongoDB é interessante para dados persistentes, orientados a documentos e indexados de várias maneiras. O Redis é mais interessante para dados voláteis ou dados semipersistentes sensíveis à latência.
Aqui estão alguns exemplos de uso concreto do Redis no MongoDB.
-
O MongoDB pré-2.2 ainda não possui um mecanismo de expiração. As coleções limitadas não podem realmente ser usadas para implementar um TTL real. O Redis possui um mecanismo de expiração baseado em TTL, tornando conveniente armazenar dados voláteis. Por exemplo, as sessões do usuário geralmente são armazenadas no Redis, enquanto os dados do usuário serão armazenados e indexados no MongoDB. Observe que o MongoDB 2.2 introduziu um mecanismo de expiração de baixa precisão no nível de coleta (para ser usado para limpar dados, por exemplo).
-
O Redis fornece um tipo de dados de conjunto conveniente e suas operações associadas (união, interseção, diferença em vários conjuntos, etc ...). É muito fácil implementar um mecanismo básico de pesquisa ou marcação facetada em cima desse recurso, que é uma adição interessante aos recursos de indexação mais tradicionais do MongoDB.
-
O Redis suporta operações pop de bloqueio eficientes em listas. Isso pode ser usado para implementar um sistema de filas distribuído ad-hoc. É mais flexível que os cursores tailable do MongoDB IMO, pois uma aplicação backend pode escutar várias filas com timeout, transferir itens para outra fila atomicamente, etc... , e mantenha os dados funcionais persistentes no MongoDB.
-
O Redis também oferece um mecanismo pub/sub. Em um aplicativo distribuído, um sistema de propagação de eventos pode ser útil. Este é novamente um excelente caso de uso para o Redis, enquanto os dados persistentes são mantidos no MongoDB.
Como é muito mais fácil projetar um modelo de dados com o MongoDB do que com o Redis (o Redis é mais de baixo nível), é interessante se beneficiar da flexibilidade do MongoDB para os principais dados persistentes e dos recursos extras fornecidos pelo Redis (baixa latência , expiração do item, filas, pub/sub, blocos atômicos, etc...). É realmente uma boa combinação.
Observe que você nunca deve executar um servidor Redis e MongoDB na mesma máquina. A memória do MongoDB foi projetada para ser trocada, o Redis não. Se o MongoDB acionar alguma atividade de troca, o desempenho do Redis será catastrófico. Eles devem ser isolados em nós diferentes.