MongoDB与Redis的用户会话?

我需要加载一些很less更改的信息字段,用于validation用户可能访问的路由。

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

然后,我为http cookie创build一个会话,并将此密钥存储为redis中的string,并由'sess:' + session_id作为键。

如果其中一个validation字段可能发生变化,是不是应该从mongodb中复制字段并处理redis和mongodb的更新?

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

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

不过, 我的猜测是,使用两个数据存储的开销超过了任何潜在的优势,因为这两个数据库的读取速度应该快得惊人:

  • 由于这些会话会经常使用,所以这个集合保持相当“热”,所以如果MongoDB中有可能的话,它也可能会保留在RAM中
  • 失去一个会话不会很好,但这不是一场灾难,所以你可以写入MongoDB,而不必等待日志提交(这与redis具有相同的可靠性)
  • 在这两种情况下,大部分时间(可能)都花费在networking堆栈上,并且您必须通过这两个数据库

所以,简而言之,在这种情况下,我看不出有什么理由说redis会快很多,但是性能往往是猜测的,特别是当细节不明时。