只是为了涵盖所有基础,有两种缓存数据的方法:
进程内
在 Proc 缓存中,将数据存储在当前应用程序域中(在应用程序进程内)。当您的应用程序在单个服务器上运行时,这可以正常工作,但在涉及多个 Web 服务器的负载平衡场景中,正如您所提到的,此设置会失败。客户端的初始 POST 可能由一个 Web 服务器处理,但接下来可能由另一个没有客户端第一个请求记录的服务器处理。
输出过程
OutProc 缓存允许您将会话和应用程序数据存储在应用程序进程之外的单独机器上。ASP。NET 允许 OutProc 缓存有 3 个选项:
StakeServer 允许您从 Web 场缓存数据,以解决您最初的问题,但由于序列化和反序列化,它的性能很慢。还有可靠性和可扩展性问题,因为您只能拥有一个可能成为单点故障的 StateServer。
SQL Server 提供会话模式,允许您存储会话数据。由于这会将数据存储在数据库中,因此会影响性能,但它确实为您提供了可靠和安全的会话管理
这些是提供分布式缓存的自定义缓存解决方案。这些解决方案提供的功能比 StateServer 和 SQL Server 提供的功能更多。
您提到的 AppFabric 是我的 Microsoft 提供的一种 .NET 分布式缓存解决方案。它为您提供了基本的分布式缓存功能,但缺少一些关键功能,例如允许您将缓存数据与数据库同步的数据库同步和“热应用”,您可以在不停止缓存的情况下从缓存集群中添加或删除节点. AppFabric 使用主/从架构来组织其缓存集群,这对于大多数应用程序来说都很好,但如果“主节点”出现故障,它可能会出现可用性问题。
NCache 是另一个 .NET 分布式缓存解决方案,它提供了许多 AppFabric 所缺少的功能。它使用点对点集群架构,提供具有高可用性的高弹性缓存。NCache 还为 NHibernate 提供对象关系映射支持。您可以在他们的网站http://www.alachisoft.com/ncache/上查看 NCache 。他们提供免费使用的NCache Express 。