Ответ 1
Redis и MongoDB могут использоваться вместе с хорошими результатами. Компания, известная под управлением MongoDB и Redis (наряду с MySQL и Sphinx), является Craiglist. См. эту презентацию от Джереми Заводного.
MongoDB интересен для постоянных, ориентированных на документы, данных, индексированных по-разному. Redis более интересен для летучих данных или чувствительных к задержкам полупостоянных данных.
Вот несколько примеров конкретного использования Redis поверх MongoDB.
-
Pre-2.2 MongoDB еще не имеет механизма истечения срока действия. Capped коллекции не могут быть использованы для реализации реального TTL. Redis имеет механизм истечения на основе TTL, что делает его удобным для хранения летучих данных. Например, пользовательские сессии обычно хранятся в Redis, тогда как пользовательские данные будут храниться и индексироваться в MongoDB. Обратите внимание, что MongoDB 2.2 внедрил механизм с низкой точностью для истечения срока действия на уровне сбора (например, для очистки данных).
-
Redis предоставляет удобный тип набора данных и связанные с ним операции (объединение, пересечение, разность на нескольких наборах и т.д.). На этой функции довольно просто реализовать базовый факсированный механизм поиска или тегирования, что является интересным дополнением к традиционным возможностям индексирования MongoDB.
-
Redis поддерживает эффективную блокировку поп-операций в списках. Это может быть использовано для реализации распределенной системы массового обслуживания ad-hoc. Он более гибкий, чем MongoDB tailable cursors IMO, поскольку бэкэнд-приложение может прослушивать несколько очередей с тайм-аутом, передавать элементы в другую очередь атомарно и т.д. Если приложение требует некоторой очереди, имеет смысл хранить очередь в Redis, и сохраняйте постоянные функциональные данные в MongoDB.
-
Redis также предлагает механизм pub/sub. В распределенном приложении может оказаться полезной система распространения событий. Это снова отличный пример использования Redis, в то время как постоянные данные хранятся в MongoDB.
Поскольку дизайн модели данных с MongoDB намного проще, чем с Redis (Redis более низкоуровневый), интересно воспользоваться гибкостью MongoDB для основных постоянных данных и дополнительными функциями, предоставляемыми Redis (низкая латентность, истечение срока действия, очереди, паб/суб, атомные блоки и т.д.). Это действительно хорошая комбинация.
Обратите внимание: вы никогда не должны запускать сервер Redis и MongoDB на том же компьютере. Память MongoDB предназначена для замены, Redis - нет. Если MongoDB запускает некоторую переменную активность, производительность Redis будет катастрофической. Они должны быть изолированы на разных узлах.