Fork me on GitHub

ASP.NET 4 AppFabric 输出缓存提供程序

缓存是用来保存你数据的地方,从而使你的应用程序访问更快速。缓存可以根据你的需要分配到许多台机器上,而开发人员无需关心数据究竟在哪台机器上。为了获得超快的性能,你甚至可以牺牲数据一致性,将缓存复制到调用客户端(本地缓存)。所保存的数据可以是任何可被序列化的.NET对象。

使用缓存的目的是让你的应用程序的性能和扩展性更好。AppFabric支持显式和隐式两种缓存使用方式来提升扩展性和性能。如果你是一名ASP.NET的开发人员,隐式和显式缓存使用方式对你来说应该相当熟悉。显式缓存使用方式让你能通过AppFabric提供的缓存API,用编程的方式添加、删除并管理缓存中的数据项。这是一个非常强大的工具来帮助你定制应用程序数据的缓存策略及使用模式,不过你需要对数据缓存的原则有一定的理解。隐式缓存使用方式利用了默认的缓存策略,能在常用的场景中发挥作用。隐式缓存使用的两个例子包括ASP.NET会话状态和HTML页面缓存(即输出缓存)。

借助 ASP.NET 提供程序模型,开发人员可以从三种会话提供程序中进行选择:InProc、StateServer 和 SQLServer。使用 AppFabric 缓存时,第四个会话提供程序在技术上是可行的,但是应当小心不要将会话与缓存混淆。缓存用于提高性能,会话用于使应用程序达到一定的状态。

用于 ASP.NET 的 AppFabric 缓存会话提供程序使用其分布式缓存(可能具有高可用性)作为 ASP.NET 会话的存储库。这一功能是透明的,且无需修改现有的代码就可以使用。有了这样的提供程序,ASP.NET 会话就可以在 Web 服务器崩溃或脱机的情况下保持可用,这是因为会话是存储在 AppFabric 缓存中的。

ASP.NET 4.0中对它进行了重新设计,提供了一个OutputCacheProvider供开发人员进行扩展,但是它默认情况下,仍然使用System.Web.Caching.Cache来做做缓存。关于ASP.NET 4.0的Output Cache的使用,请参考ScottGUVS 2010 和 .NET 4.0 系列之《ASP.NET 4中的可扩展输出缓存》篇

ASP.NET开发团队在codeplex上发布了ASP.NET 4 Providers for AppFabric Caching,里面有两个提供者ASP.NET会话状态和HTML页面缓存(即输出缓存):

  • Session state: Microsoft.Web.DistributedCacheSessionStateStore
  • Output caching: Microsoft.Web.DistributedOutputCache

目前这两个提供者没有正式发布,只是发布在社区中进行测试和反馈,不能直接在生产环境中使用。不过AppFabric 已经带了一个ASP.NET Session State Provider (Windows Server AppFabric Caching),具体参考http://msdn.microsoft.com/en-us/library/ee790859.aspx

使用方法如下:

1、在Asp.Net 4.0 的web.config文件中添加了关于缓存的配置节,如下所示

<caching>

     <outputCache defaultProvider="AppFabricOutputCache">

        <providers>

         <add name="AppFabricOutputCache" type="Microsoft.Web.DistributedOutputCache, Microsoft.Web.DistributedCache" hostName="localhost" cachePort="22233" cacheName="session"/>

       </providers>

     </outputCache>

   </caching>

2、使用Microsoft.Web.DistributedOutputCache

1)在配置文件中做配置,将自定义的实现作为默认输出缓存支持,请看1的配置
2)在UserControl中指定使用Provider的名字,改名字在web.config中定义,例如

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="IamUserControl.ascx.cs" Inherits="OutputCacheTest.IamUserControl" %>

<%@ OutputCache Duration="3000" ProviderName="AspNetInternalProvider" VaryByParam="None" %>

需要注意的是,只能在UserControl中指定Provider的名字,在Page的声明中是不允许的,在Page中默认情况会使用web.config中配置的defaultProvider,但是我们可以通过3)中介绍的方法给不同的页面使用不同的OutputCacheProvider实现。

同样地,如果我将[OutputCache]特性加到某个ASP.NET MVC控制器的任意一个action方法上时,内容也会通过使用我的ScottOutputCache提供器被缓存和保存起来:

image

3)你可以通过覆盖应用的Global.asax文件中的 GetOutputCacheProviderName() 方法,在每个请求的基础上,动态指定使用哪个输出缓存提供器。在下面,我表明,对我应用中的 “Home.aspx”网页我想要使用内置的,用内存的ASP.NET输出缓存提供器,然后对所有其他的请求,我想要使用注册在web.config文件中的提供器:在Global.asax文件中重写GetOutputCacheProviderName(HttpContext context)方法,根据context返回不同的实现名字,如下例子

Asp.Net 4.0 新特性之 使用自定义OutputCache Provider

VS2010] ASP.NET 4.0 新功能:自訂輸出快取 (Output Cache) 提供者

在 ASP.NET 中构建和使用自定义的 OutputCache 提供程序

 

posted @ 2010-07-24 10:14  张善友  阅读(2173)  评论(0编辑  收藏  举报