MongoDB与Redis的用户会话?

时间:2014-04-06 00:32:27

标签: node.js mongodb session redis

我需要加载一些不经常更改的信息字段,以验证用户可能访问的路由。

目前,我查询mongodb并将这些字段存储在redis中,并将这些字段与任何特定状态信息一起存储在用户登录时由'user:' + mongodb_user_objectid键入的单个哈希中。

然后我为http cookie创建一个会话,并将此密钥存储为redis中的字符串,并由'sess:' + session_id键入。

最好不要复制mongodb中的字段并处理更新redis和mongodb时其中一个验证字段可能会发生变化吗?

在不使用redis作为中间人的情况下直接从/向mongodb读取和写入此会话信息是否存在显着的性能差异?

1 个答案:

答案 0 :(得分:14)

不幸的是,明确的答案需要使用您的设置进行测量,因为有太多潜在因素。

然而,我的猜测是使用两个数据存储的开销超过了任何潜在的优势,因为两个数据库上的读取速度应该非常快:

  • 由于会话将经常使用,因此集合保持非常“热”,因此如果MongoDB中有任何可能的话,它可能会保留在RAM中
  • 丢失会话不会很好,但这不是灾难,因此您可以在不等待日记提交的情况下写入MongoDB(这与redis的可靠性几乎相同)。
  • 在任何一种情况下,大部分时间(可能)花在网络堆栈上,你必须为两个数据库完成这些工作

因此,简而言之,在这种情况下,我没有看到为什么redis会快得多的原因,但同样,性能通常是猜测,特别是当细节未知时。