Session 什么';使用非连接默认会话存储的优点是什么?

Session 什么';使用非连接默认会话存储的优点是什么?,session,node.js,redis,express,Session,Node.js,Redis,Express,对于express应用程序,我看到有一个用于存储会话的connect mongodb和connect redis中间件,但我不明白为什么这是必要的——默认内存会话存储有什么问题?它是否适用于需要跨多台计算机同步会话的大型应用程序 另外,有谁能为最快的会话存储提供任何基准/提示吗?我猜是Redis,因为它的键/值存储更简单。在数据库(MongoDB、Redis等)中存储会话数据的唯一原因是,它可以跨节点进程使用,并且可以跨故障持久。在横向扩展的体系结构中,非常希望有无状态的服务器,以便无论特定用户

对于express应用程序,我看到有一个用于存储会话的connect mongodb和connect redis中间件,但我不明白为什么这是必要的——默认内存会话存储有什么问题?它是否适用于需要跨多台计算机同步会话的大型应用程序


另外,有谁能为最快的会话存储提供任何基准/提示吗?我猜是Redis,因为它的键/值存储更简单。

在数据库(MongoDB、Redis等)中存储会话数据的唯一原因是,它可以跨节点进程使用,并且可以跨故障持久。在横向扩展的体系结构中,非常希望有无状态的服务器,以便无论特定用户连接到哪个服务器,一切都能正常工作,并且服务器可以在不丢失任何状态的情况下上下移动

换句话说,假设在负载平衡器后面有10台服务器处理传入的请求。用户1发出请求,由服务器a处理并登录。您需要存储他们已登录的事实,以便将其存储在会话中。下一个请求最终被路由到服务器C,因为服务器A正忙于处理另一个请求。为了让服务器C知道用户已经登录,它需要会话数据。那么,它如何访问服务器A存储的会话数据呢

一种方法是将数据存储在客户端的cookie中,每次请求都会提交cookie,但这不是很安全。另一种方法是尝试跨节点服务器同步状态,这是可以做到的,但往往成本高昂且容易出错。最简单的方法是将会话ID存储在cookie中,然后将实际会话数据存储在数据库中。然后,每个节点服务器都可以访问相同的数据库,以便可以查找会话数据。通过这种方式,您可以轻松地伸缩节点服务器,并在服务器出现故障时对其进行负载平衡,而不会丢失任何数据

就性能而言,内存存储将是最快的(但有上述缺点)。Redis将是第二快的,MongoDB将是最慢的(通常比Redis慢4倍左右)。请记住,对于绝大多数网站来说,这两种方法都足够快