带有 redis 的 MongoDB

标签 mongodb redis nosql

谁能举例说明什么时候将 Redis 和 MongoDB 结合使用会受益?

最佳答案

Redis 和 MongoDB 可以一起使用,效果很好。一家以运行 MongoDB 和 Redis(以及 MySQL 和 Sphinx)而闻名的公司是 Craiglist。见 this presentation来自 Jeremy Zawodny。

MongoDB 对于持久的、面向文档的、以各种方式索引的数据很有趣。 Redis 对于 volatile 数据或延迟敏感的半持久性数据更有趣。

这里有几个在 MongoDB 上具体使用 Redis 的例子。

  • 2.2 之前的 MongoDB 还没有过期机制。 Capped collections 不能真正用于实现真正的 TTL。 Redis 有基于 TTL 的过期机制,方便存储易失数据。例如,用户 session 通常存储在 Redis 中,而用户数据将存储和索引在 MongoDB 中。请注意,MongoDB 2.2 在集合级别引入了低精度过期机制(例如用于清除数据)。

  • Redis 提供了一种方便的集合数据类型及其相关操作(联合、交集、多个集合的差异等...)。在此功能之上实现基本的分面搜索或标记引擎非常容易,这是对 MongoDB 更传统的索引功能的有趣补充。

  • Redis 支持对列表进行高效的阻塞弹出操作。这可以用来实现一个 ad-hoc 分布式排队系统。它比 MongoDB 可尾游标 IMO 更灵活,因为后端应用程序可以监听多个超时队列,原子地将项目传输到另一个队列等......如果应用程序需要一些排队,则将队列存储在 Redis 中是有意义的,并将持久化的函数数据保存在 MongoDB 中。

  • Redis 还提供了发布/订阅机制。在分布式应用程序中,事件传播系统可能很有用。这又是 Redis 的一个很好的用例,而持久性数据保存在 MongoDB 中。

因为使用 MongoDB 设计数据模型比使用 Redis 容易得多(Redis 更底层),有趣的是从 MongoDB 对主要持久数据的灵 active 以及 Redis 提供的额外功能中受益(低延迟、项目过期、队列、发布/订阅、原子 block 等...)。这确实是一个很好的组合。

请注意,您永远不应该在同一台机器上运行 Redis 和 MongoDB 服务器。 MongoDB 内存被设计为可以换出,Redis 不是。如果 MongoDB 触发一些交换事件,Redis 的性能将是灾难性的。它们应该被隔离在不同的节点上。

关于带有 redis 的 MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10696463/

相关文章:

javascript - mongoose.findOneAndUpdate 返回 null

java - 单元测试 spring data mongodb 自定义转换器

join - Cassandra 非规范化数据模型

sql - 为什么sql是垂直可扩展的,而nosql是水平可扩展的

php - 在 yiimongodbsuite 中插入嵌入式文档

mongodb - 如何在 mongodb 中将项目分组到对象中?

redis - 在单个命令中插入原子索引重写结构

django - 在 Celery 中检索任务的结果

.net - Redis 服务在 Windows 7 上启动失败

mongodb - 在 MongoDB 中存储历史价格