节点js同时使用Mongo和Redis

时间:2012-05-22 08:31:47

标签: node.js mongodb redis socket.io

我正在使用Node.js开发一个小项目。我正在使用mongoose作为模型,因此我正在使用MongoDb。我将会话保持在MongoStore。我还想使用socket.io运行Node的几个进程。来自socket.io docs:

    The MemoryStore only allows you deploy socket.io on a single process. 
If you want to scale to multiple process and / or multiple servers 
you can use our RedisStore which uses the Redis 
NoSQL database as man in the middle.

所以我想我也需要Redis。我是Node的新手,我想知道 - 使用两个数据库来管理应用程序的不同部分是正常的。或者有一种方法可以在运行多个Node进程时使用socket.io并仅使用MongoDb

2 个答案:

答案 0 :(得分:4)

最近出现了一个使用MongoStore和使用mubsub(Pub / sub for Node.js和MongoDB)的发布/订阅功能的解决方案。

它可以以与RedisStore几乎相同的方式附加到socket.io:

io.configure(function() {
    io.set('store', new MongoStore({host: 'localhost', port: 27017, db:'session_db'}));
});

更多信息和来源:https://github.com/kof/socket.io-mongo

答案 1 :(得分:2)

Redis商店已内置于Socket.IO中,但更重要的是有两个特别需要Socket.IO的重要功能:

1)发布 - 订阅(在进程之间进行通信)
2)键值存储(存储有关连接的所有信息)

虽然可以使用MongoDB完成键值存储部分,但它不提供pub-sub功能。

底线,如果您需要扩展超过一个进程(意味着您期望超过几千个并发请求),那么RedisStore就是解决方案。

资源: