MongoDB的使用Redis的(MongoDB with redis)

2019-06-24 16:19发布

谁能给的时候,你会从相互配合使用的Redis和MongoDB受益例如使用情况?

Answer 1:

Redis的和MongoDB可以同时具有良好的效果使用。 众所周知运行的MongoDB和Redis的(以及MySQL和狮身人面像)公司是Craiglist上。 请参阅此演示文稿由杰里米·萨沃德尼。

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

下面是有关MongoDB的顶部Redis的具体用法的几个例子。

  • 预2.2 MongoDB中没有尚未到期机制。 皑皑的集合不能真正被用来实现一个真正的TTL。 Redis的具有基于TTL的到期机制,使得它方便存储易失性数据。 例如,用户会话通常被存储在Redis的,而用户数据将被存储在MongoDB的索引。 需要注意的是MongoDB的2.2已经引入在集合级别低精度期满机构(用于例如净化的数据)。

  • Redis的提供了一个方便的设置数据类型及其相关操作(集,交集,对多组不同,等...)。 这是很容易实现这个功能,这是一个有趣的除了MongoDB的更传统的索引功能之上的基本面搜索或标记引擎。

  • Redis的支持列表上的高效拦截弹出操作。 这可以被用来实现一个特设的分布式排队系统。 它比MongoDB的tailable光标更加灵活IMO,因为后端应用程序可以听几个队列有超时,原子转移项目到另一个队列,等等。如果应用程序需要一些排队,是有意义的存储在Redis的队列,并保持在MongoDB中持久性功能数据。

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

因为它是很容易设计出MongoDB的比Redis的(Redis的更级低)的数据模型,有趣的是,从MongoDB中的主持久性数据的灵活性中受益,并从Redis的所提供的额外功能(低延迟,项目到期,队列的pub / sub,原子块,等...)。 这确实是一个不错的组合。

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



Answer 2:

很明显,我们还有更多的差异比这个,但极高的概述:

对于使用情况:

  • Redis的通常用作一个缓存层或共享的分布式计算白板。
  • MongoDB是经常被用来作为换出替代传统的SQL数据库。

技术上:

  • Redis的是一个内存中分贝与磁盘的持久性(全分贝需要以适应RAM)。
  • MongoDB是一个磁盘备份数据库只需要为索引足够的RAM。

有一些重叠,但它是非常普遍的同时使用。 这是因为:

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

Redis的可以作为一个传统的数据存储的替代品,但它经常其他正常的“长”数据存储使用,如蒙戈和PostgreSQL,MySQL的,等等。



Answer 3:

Redis的MongoDB的具有出色的作品作为缓存服务器。 这是发生了什么。

每当那猫鼬发出高速缓存查询时,它会首先去到缓存服务器。

缓存服务器将检查,看看是否能准确的查询提供了前所未有的发行。

如果还没有,那么缓存服务器将采取查询,发送到MongoDB的和蒙戈将执行查询。

然后,我们将采取查询的结果,然后返回到缓存服务器,缓存服务器将存储在自身的查询结果。

它会说我随时执行该查询,我得到这个响应,因此其将维持在颁发的查询和来自这些查询回来响应之间的记录。

缓存服务器将采取响应,并发送回猫鼬,鼬会给它来表达,它最终会在应用程序内结束。

任何时候,同样准确的查询再次发出后,猫鼬将发送相同的查询缓存服务器,但如果缓存服务器认为它不会将查询发送到MongoDB中之前,而不是它要采取的响应这个发送查询查询了它最后一次,并立即将其发回过来猫鼬。 这里没有指标,没有全表扫描,什么都没有。

我们正在做一个简单的查找说已执行此查询? 是? 好吧,拿请求,并立即将其发回,不发送任何内容蒙戈。

我们有猫鼬服务器,缓存服务器(Redis的)和MongoDB。

在缓存服务器则可能是数据存储,所有的按键都是一些类型的查询之前发出和值的查询结果的键值类型的数据存储。

因此,也许我们被_id找了一堆相关博客文章的。

所以,也许在这里键的之前我们已经看过了记录_id。

所以让我们想象,猫鼬问题它试图找到与123 _id一个博客帖子一个新的查询,查询流入缓存服务器,缓存服务器将检查其是否具有这是寻找一个_id任何查询结果123。

如果没有在缓存服务器中存在,这个查询取和到MongoDB实例发送。 MongoDB的将执行查询,得到的响应,并发送回。

这一结果被送回交给谁需要这个结果的缓存服务器,并立即将其发送回猫鼬所以我们得到尽可能快的响应。

紧接着的是,缓存服务器也将发出的查询,并添加到其收藏已发出的查询,并采取查询的结果,并将其存储正对着该查询。

因此,我们可以想像,在我们再次发出相同的查询以后,它击中的缓存服务器,它着眼于它拥有的所有钥匙,并说哦,我已经发现,博文,它不会伸出手来蒙戈,它只是需要查询的结果,并直接发送到猫鼬。

我们不是在做复杂的查询逻辑,没有指标,没有这样的。 它尽可能快地。 它是一种简单的键值查找。

多数民众赞成的缓存服务器(Redis的)如何与MongoDB中工作的概述。

现在有其他问题。 我们是缓存数据永远不会消失? 我们如何更新记录?

我们不希望总是在缓存中存储数据和从缓存中读取。

缓存服务器不用于任何写操作。 缓存层仅用于读取数据。 如果我们曾经写数据,写总会去到MongoDB的情况下,我们需要确保我们随时将数据写入我们清除存储在关系到我们刚刚更新蒙戈记录中的缓存服务器上的任何数据。



文章来源: MongoDB with redis