在同一台服务器上设置MongoDB和Redis

时间:2014-08-16 19:06:13

标签: node.js mongodb architecture redis

目前我使用Node.js和MongoDB设置了一个简单的API服务器,但是我想开始将Redis用于缓存请求。在与MongoDB服务器相同的机器上设置Redis实例是不好的做法吗?如果我将来扩展MongoDB服务器,是否有任何我应该注意的Redis设置问题?

2 个答案:

答案 0 :(得分:4)

虽然Redis和MongoDB确实是一个很好的组合,但它们不应该安装在同一节点上,特别是如果MongoDB数据库不适合内存。

MongoDB利用操作系统的虚拟内存机制,即使在交换的情况下(由于内存局部性),其数据结构(btree)也能提供诚实的性能。如果MongoDB数据库大于内存,则机器将交换,这是预期的行为。

另一方面,Redis是一个单线程内存数据存储,其数据结构针对随机内存访问进行了调整。一切都必须适合记忆。如果主机开始交换一些Redis内存,它的性能将会非常糟糕。

如果你把两者放在同一台主机上,MongoDB将使机器交换,Redis将不再响应。解决问题的一种方法是使用cgroup(或类似的隔离机制)来阻止MongoDB占用机器的内存,但它使配置更复杂。我不推荐它。

答案 1 :(得分:0)

您可能会发现最大的问题是MongoDB之间的资源争用是想要为其工作集分页数据,而redis想要使用相同的内存地址,因为操作系统会分配这些页面。

根据我自己的经验,我有redis和MongoDB并排运行,但我要强调他们合作的原因是因为我的MongoDB工作集和我在redis中存储的数据量。

我所说的一切都取决于你对这两者的使用以及你运行它们的金属。如果你发现你使用redis来存储很多,那么你在MongoDB中的工作集也很大,比如一个小服务器那么你很可能会发现这两个会相互碰撞但是如果你在你的RAM中留下足够的空间用于两个人快乐地坐在一起,那么这不应该是一个太大的问题。