Node.js 在Node/Express应用程序中,会话数据实际存储在哪里?

Node.js 在Node/Express应用程序中,会话数据实际存储在哪里?,node.js,express,session,redis,Node.js,Express,Session,Redis,Express应用程序中实际存储的会话数据在哪里?是否存在某种内置缓存,节点可以从中访问会话数据?会话数据是否存储在内存中?开发人员通常会将会话数据保存到Redis吗?Express中没有内置会话数据。有一些外部模块,例如,您可以将其引入到项目中,以便创建一个用户会话对象,以便在Express应用程序中使用 特别是对于express session,它有一个内置的“不适用于生产”内存存储(因此会话数据保存在内存中,无法在服务器重新启动后保存)。但是,存储是一个可插拔的项目,如清单所示,有几十个会

Express应用程序中实际存储的会话数据在哪里?是否存在某种内置缓存,节点可以从中访问会话数据?会话数据是否存储在内存中?开发人员通常会将会话数据保存到Redis吗?

Express中没有内置会话数据。有一些外部模块,例如,您可以将其引入到项目中,以便创建一个用户会话对象,以便在Express应用程序中使用

特别是对于express session,它有一个内置的“不适用于生产”内存存储(因此会话数据保存在内存中,无法在服务器重新启动后保存)。但是,存储是一个可插拔的项目,如清单所示,有几十个会话存储选项。它们在各种不同的数据库中提供存储(用于持久会话存储)。查看所有不同会话存储选项的列表。您可以看到常见数据库的会话存储驱动程序,如MongoDB、Microsoft SQL server、DB2、Mysql、Redis、各种基于内存的存储,甚至一些基于云的存储

所以,你有很多选择

开发人员通常会将会话数据保存到Redis吗

如果您的特定需求符合Redis的最佳性能,那么Redis是一个流行的选项。如果您不一定需要永久会话存储,那么您将在某个Unix版本上运行服务器,并且您有一个集群应用程序,需要从多个服务器进程访问会话数据(因此无法使用进程内内存存储)


不需要长期持久性的小型部署可以使用一个生产就绪的基于内存的存储。Windows部署将选择一个比Redis更受Windows支持的数据库。如果您已经在使用其中一个受支持的数据库,许多人会选择该数据库进行会话,只是为了简化部署、管理、支持,也许还有许可(为什么要添加另一种类型的数据库)。

所以会话通常像数据库一样存储在持久数据存储中?有趣的是,我认为情况可能并非如此,因为会话本身是临时的。我猜
express session
模块将是唯一读取或修改会话数据的模块,它将负责清理过期的会话?@GregThomas-这实际上取决于给定应用程序使用会话数据的时间以及会话数据的持续时间。例如,如果购物车保持在会话中,那么您可能希望该会话持续数周。但是,对于其他类型的应用程序,会话是完全临时的,不需要在数据库中,除非它需要从多个主机访问(例如通过集群)。您可以查看
express session
源代码,您可以看到它们实际上是如何存储会话的。你的第二个问题有点难回答,这完全取决于需求,当然,你可以使用Redis(或任何数据存储)