MongoDB与Redis

任何人都可以举例说明什么时候使用Redis和MongoDB的好处?

Redis和MongoDB可以一起使用,效果很好。 Craiglist是一家运行MongoDB和Redis(连同MySQL和Sphinx)的公司。 从Jeremy Zawodny看这个介绍 。

MongoDB对于持久化,面向文档,以各种方式索引数据非常有趣。 对于易失性数据或延迟敏感的半持久性数据,Redis更为有趣。

下面是在MongoDB之上的Redis具体使用的一些例子。

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

  • Redis提供了一个方便的设置数据types及其相关的操作(联合,交集,多集上的差异等)。 在这个特性之上实现一个基本的分面search或标记引擎是相当容易的,这是对MongoDB更传统的索引function的一个有趣的补充。

  • Redis支持在列表上高效地阻止popup操作。 这可以用来实现一个专门的分布式排队系统。 它比MongoDB tailable游标IMO更灵活,因为后端应用程序可以用超时的方式监听几个队列,以primefaces方式将项目传输到另一个队列等等。如果应用程序需要排队,那么将队列存储在Redis中是有意义的,并将持久的function数据保存在MongoDB中。

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

因为使用MongoDBdevise数据模型要比使用Redis更容易(Redis更低级),所以从MongoDB对主要持久性数据的灵活性以及Redis提供的额外function(低延迟,项目到期,队列,pub / sub,primefaces块等)。 这确实是一个很好的组合。

请注意,不应该在同一台机器上运行Redis和MongoDB服务器。 MongoDB内存被devise成可以被交换出去,Redis不是。 如果MongoDB触发一些交换活动,Redis的性能将是灾难性的。 他们应该被隔离在不同的节点上。

显然,与此相比,还有很多不同之处,但是对于一个非常高的概述:

对于用例:

  • Redis经常被用作分布式计算的caching层或共享白板。
  • MongoDB经常用作传统SQL数据库的交换replace。

技术上:

  • Redis是一个带有磁盘持久性的内存数据库(整个数据库需要放在RAM中)。
  • MongoDB是一个磁盘备份的数据库,只需要足够的内存索引。

有一些重叠,但使用两者是非常普遍的。 原因如下:

  • MongoDB可以存储更多的数据更便宜。
  • 整个数据集的Redis速度更快。
  • MongoDB的文化是“存储一切,以后找出访问模式”
  • Redis的文化是“仔细考虑如何访问数据,然后存储”
  • 两者都有依赖于他们的开源工具,其中许多是一起使用的。

Redis可以作为传统数据存储的替代品,但它最常用于另一个正常的“长”数据存储,如Mongo,Postgresql,MySQL等。