微软 ASP.NET 输出缓存 提供在指定的持续时间内缓存 ASP.NET 页面或用户控件的呈现内容的功能。 这允许您的 ASP.NET 应用程序为来自缓存的所有后续请求提供服务,而不是重新呈现和重新执行页面。
你添加 <% @OutputCache %> 页面上的指令以使用 ASP.NET 输出缓存。
1 2 |
<%@Page … %> <%@OutputCacheDuration="duration"VaryByParam="paramList"%> |
ASP.NET 输出缓存是一项非常有用的功能,尤其是在页面访问频率高于其更改并且您从缓存中提供它的情况下。 这通过避免页面重新执行以及通过减少昂贵的数据库访问来提高应用程序性能,尤其是当页面涉及大量繁重的数据库操作时。 这也提高了应用程序的可伸缩性,因为当有数百万这样的页面和请求涉及数据库操作时,数据库通常会成为可伸缩性的瓶颈。
Microsoft Azure 环境中的 ASP.NET 输出缓存问题
当您在 Microsoft Azure 中使用输出缓存时,默认情况下,页面输出将作为 InProc 存储在您的 Microsoft Azure Web 角色中。 第一个问题是它将您限制在 Web 角色实例上可用的内存,当您缓存大量页面输出数据时,这可能会产生内存不足的问题。 另一个问题是您的应用程序在多个负载平衡的 Microsoft Azure Web 角色实例上运行。 下一个请求可能会转到另一个 Web 角色实例,该实例也会在此实例中创建 ASP.NET 输出缓存数据的新副本。 每个 Web 角色实例中的这些页面输出的冗余副本会消耗大量额外的内存。
Microsoft Azure Web 角色实例也非常频繁地回收以进行维护和修补。 发生这种情况时,所有页面输出都将丢失,您必须重新执行所有页面以重新填充页面输出缓存,这会对您的 Azure 应用程序的性能产生负面影响。
如何解决 Microsoft Azure 中的输出缓存问题?
在 Microsoft Azure 中解决所有这些问题的一种方法是使用分布式缓存,它在进程外运行并且是所有 Microsoft Azure Web 角色实例的公共存储。 ASP.NET 4.0 引入了一个可扩展点,可帮助开发人员使用他们选择的任何分布式缓存作为其 ASP.NET 输出缓存存储。
分布式缓存由所有 Microsoft Azure Web 角色共享以用于页面输出,因此不会在各个 Web 角色实例中创建冗余副本。 Microsoft Azure Web 角色变得完全无状态,因此在回收 Web 角色时数据永远不会丢失。 通过将所有缓存服务器的内存资源集中在一起,您可以在分布式缓存中缓存大量数据。 此外,分布式缓存减少了数据库的负载,因为您不必在每个 Microsoft Azure Web 角色实例中分别执行涉及数据库调用的页面执行。
NCache Azure 是一个 .NET 的内存中分布式缓存 部署在 Microsoft Azure 云中的应用程序。 NCache Azure 已经实现了 ASP.NET 输出缓存提供程序,您可以使用它来存储 ASP.NET 页面输出并解决上述所有问题。 此外,部署 NCache 作为一个 Azure 缓存服务 通过复制提供数据可靠性并提高应用程序的可扩展性。
使用方法 NCache Azure ASP.NET 输出缓存提供程序
您可以使用 NCache Azure 用于在 ASP.NET 中进行输出缓存,如下所示,无需对 Microsoft Azure 应用程序进行任何代码更改。
步骤1: 添加参考 NCache 用于 Azure 输出缓存提供程序程序集。
文件:web.config
1 2 3 4 5 6 |
<compilation debug="true " targetframework="4.0"> <assemblies> <add assembly="Alachisoft.NCache.OutputCache,Version=x.x.x.x,Culture=neutral"> </add></assemblies> </compilation> |
步骤2: 注册 NCache 对于 Azure 输出缓存提供程序下配置> 部分并提供缓存设置。
文件:web.config
1 2 3 4 5 6 7 8 |
<caching> <outputcache defaultprovider="NOutputCacheProvider"> <providers> <add name="NOutputCacheProvider" type="NCOutputCache.NOutputCacheProvider" exceptionsenabled="true" enablelogs="false" cachename="mypartitionofReplicaCache"> </add></providers> </outputcache> </caching> |
步骤3: 在要缓存的页面上添加 ASP.NET 输出缓存指令。
1 |
<%@OutputCacheVaryByParam="ProductCategory"Duration="300"%> |
NCache Azure ASP.NET 输出缓存功能
NCache for Azure 提供了一组丰富的功能,用于缓存和管理 Microsoft Azure 的输出缓存。 以下是它们的列表:
- 指定页面输出的持续时间: NCache for Azure 允许您指定要缓存 ASP.NET 页面输出的持续时间。
- 缓存不同版本的页面: NCache 对于 Azure,您可以根据各种 ASP.NET 输出缓存指令(例如 VaryByParam、VaryByCustom、VaryByControl)缓存不同版本的页面。 如果为页面请求接收到不同的参数,则将另一个版本的页面输出存储在分布式缓存中。
- 缓存页面的不同部分: 您还可以仅指定页面的一部分而不是缓存整个页面。 这适用于您仅缓存页面的静态部分并保留在运行时呈现的动态部分的情况。
- 为 ASP.NET 输出缓存实现自定义挂钩: NCache for Azure 允许您为页面输出实现和注册自定义挂钩(接口)。 这是为您的页面输出附加一些扩展属性,例如 NCache 用于 Azure 数据库依赖项、标记、组等。
结论
如您所见,分布式缓存允许您缓存 ASP.NET 页面输出,从而解决了多个负载平衡 Azure Web 角色的应用程序问题。 NCache 是一个 Azure ASP.NET 输出缓存提供程序,有助于提高 ASP.NET 应用程序性能的可扩展性和可靠性。