Asp.net mvc 3 MemoryCache对象与负载平衡

Asp.net mvc 3 MemoryCache对象与负载平衡,asp.net-mvc-3,iis-7.5,appfabric,Asp.net Mvc 3,Iis 7.5,Appfabric,我正在使用ASP.NETMVC3编写一个web应用程序。我想使用MemoryCache对象,但我担心它会导致负载平衡web服务器出现问题。当我在谷歌上搜索时,这个问题似乎在服务器上解决了,即使用AppFabric。如果一家公司有负载平衡的服务器,是否需要在其上确保运行AppFabric或类似的东西?或者,作为一名开发人员,我可以或应该为此做些什么?首先,对于ASP.NET,您应该查看而不是MemoryCache。MemoryCache是在.NET 4.0中引入的通用缓存API,在非web应用程序

我正在使用ASP.NETMVC3编写一个web应用程序。我想使用MemoryCache对象,但我担心它会导致负载平衡web服务器出现问题。当我在谷歌上搜索时,这个问题似乎在服务器上解决了,即使用AppFabric。如果一家公司有负载平衡的服务器,是否需要在其上确保运行AppFabric或类似的东西?或者,作为一名开发人员,我可以或应该为此做些什么?

首先,对于ASP.NET,您应该查看而不是MemoryCache。MemoryCache是在.NET 4.0中引入的通用缓存API,在非web应用程序中提供与ASP.NET缓存等效的缓存

您可以正确地说,AppFabric解决了多个服务器拥有自己的缓存数据实例的问题,因为它提供了一个可以从所有web服务器访问的逻辑缓存。在将其作为问题的解决方案之前,需要考虑以下几点:

  • 它不是作为Windows Server的一部分提供的—正如您所说,它是在Windows Server上提供的 如果你想使用它,你可以在你的服务器上安装它。什么时候 AppFabric发布后,有人建议它将作为 Windows Server下一版本的一部分,但我还没有看到 任何有关Windows Server 2012的信息都证实了这一点

  • 你需要额外的服务器,或者至少建议你有 他们。Microsoft建议您在上运行AppFabric 专用服务器。这意味着AppFabric本身是一个免费的 下载时,您可能需要额外的Windows Server许可证 成本。说到这里

  • 您可能需要企业版许可证。如果你想使用 AppFabric的高可用性功能,您只能使用 运行Enterprise Edition的服务器,这是一个更昂贵的许可证 超过标准版

  • 你可能根本不需要它。其中一些将取决于您的应用程序以及您希望使用共享缓存层的原因。如果您担心多台服务器上的缓存可能与数据库(或者实际上彼此)不同步,那么明智地使用对象可能会解决这个问题

这篇CodeProject文章提出了一种处理您描述的场景的方法

您没有提到您正在使用的负载平衡的风格:“粘性”或“无状态”。到目前为止,最简单的解决方案是使用粘性会话


如果您想使用本地内存缓存和无状态负载平衡,那么最终可能会出现竞争条件,即跨服务器失效消息到达得晚。如果您使用ASP.NETMVC中非常常见的Post Redirect Get模式,这可能会特别有问题。这可以通过使用cookies来补充缓存无效广播来克服。我在中详细介绍了这一点。

我当时考虑的是使用缓存处理小型附件。附件是要保存的较大对象的一部分。当用户单击“保存”时,将保存该对象。如果对象还没有保存,而用户上传了一个文件,那么它需要转到某个地方。在较大的对象到达之前将数据放入数据库不是正确的答案。当用户在保存之前取消时,应用程序必须删除该文件。IMO缓存是存储文件的正确位置,因为可以以更高效的方式删除该项。这种逻辑有缺陷吗?