考虑一个处理tomcat的Java Web应用程序,例如sessionssessions存储在内存中(在服务器重新启动期间可能是serialized到硬盘)。

对于不自行处理会话的nodejs应用程序,可以使用位于https://github.com/expressjs/session处的名为expressjs/session的某些库来开发会话。查看expressjs/session文档时,您会看到以下警告:


  警告:默认的服务器端会话存储MemoryStore
  并非专为生产环境而设计。会漏的
  在大多数情况下,内存不会扩展到单个进程,
  并且用于调试和开发。


对我来说,将会话存储在内存中是Java Web应用程序当前完成的工作,没有任何问题。

现在我的问题是:


将会话存储在内存中根本不是一个好习惯吗?
如果我不必担心在服务器重新启动期间丢失会话并提高性能(因为我的应用程序规模大),那么在nodejs中将会话存储在内存中仍然不是一个好习惯吗? (请参阅What is the use of a session store?

最佳答案

我认为在内存中进行会话是不明智的做法,只有在开发中进行会话时才应该这样做。这是因为在某个扩展点上,您将需要对节点进程进行群集,出于明显的原因,这将无法访问存储在不同进程中的会话。您的应用程序可能永远不需要多个进程,即使在某个时候,有时可能会存储太多不必要的会话,从而导致内存泄漏。我建议将Redis作为您的会话存储或诸如mongoDB的某种其他形式的数据库使用,有一个类似的问题问here可能会有所帮助。

10-08 04:43