ASP.NET缓存概述[转载]
生成高性能、可缩放的 Web 应用程序最重要的因素之一是能够在首次请求项时将这些项存储在内存中,不管它们是数据对象、页还是页的某些部分。可以将这些项缓存或存储在 Web 服务器上或请求流中的其他软件上,如代理服务器或浏览器。能够避免重新创建满足先前请求的信息,尤其是那些需要大量处理器时间或资源的信息。
ASP.NET 提供了两种方式来创建高性能 Web 应用程序的缓存类型。第一种类型是输出缓存,它允许将动态页和用户控件响应存储在输出流(从发起服务器到请求浏览器)中任何具备 HTTP 1.1 缓存功能的设备上。当后面的请求发生时,不执行页或用户控件代码,缓存的输出用于满足该请求。第二种类型的缓存是应用程序数据缓存,可以使用它以编程方式将任意对象(如应用程序数据)存储到服务器内存中,以节省重新创建这些对象所需的时间和资源。
ASP.NET 2.0支持以下几种缓存:
1.页面输出缓存
将ASP.NET页面保存在服务器的内存中,当用户请求该页面的时候,直接从内存中输出相关数据,不必再次经过页处理生命周期。
页输出缓存提供了两种页缓存模型:整页缓存和部分页缓存。整页缓存允许将页的全部内容保存在内存中,部分页缓存允许缓存页的部分内容,其他部分则为动态内容。可以分别为每个页配置页缓存,也可以在 Web.config 文件中创建缓存配置文件。利用缓存配置文件,只定义一次缓存设置就可以在多个页中使用这些设置。
部分页缓存可采用两种工作方式:控件缓存和缓存后替换。控件缓存允许将信息包含在一个用户控件内,然后将该用户控件标记为可缓存的,以此来缓存页输出的部分内容。这一方式可缓存页中的特定内容,并不缓存整个页,因此每次都需重新创建整个页。例如,如果要创建一个显示大量动态内容(如股票信息)的页,其中有些部分为静态内容(如每周总结),这时可以将静态部分放在用户控件中,并允许缓存这些内容。缓存后替换与控件缓存正好相反。这种方式缓存整个页,但将页的个别部分标记为不可缓存。
2.应用程序缓存
应用程序缓存提供了一种编程方式,可通过键/值对将任意数据存储在内存中。使用应用程序缓存与使用应用程序状态类似。但是,与应用程序状态不同的是,应用程序缓存中的数据是易失的,即数据并不是在整个应用程序生命周期中都存储在内存中。应用程序缓存的优点是由 ASP.NET 管理缓存,它会在项过期、无效、或内存不足时移除缓存中的项。还可以配置应用程序缓存,以便在移除项时通知应用程序。
自动移除数据
出于以下原因之一,ASP.NET 可以从缓存中移除数据:
1.由于服务器上的内存不足,开始一个称为“清理”的过程。
2.由于缓存中的项已过期。
3.由于项的依赖项发生了更改。
注解:
清理:清理是在内存不足时从缓存中删除项的过程。如果某些项在一段时间内未被访问,或是在添加到缓存中时被标记为低优先级,则这些项会被移除。
过期:在缓存项过期时,ASP.NET 会自动从缓存中移除这些项。向缓存添加项时,可以按下表中的描述设置其过期时间。
过期类型 |
说明 |
---|---|
可调过期 |
指定某项自上次被访问后多长时间过期。例如,可以将某项设置为自上次在缓存中被访问后 20 分钟过期。 |
绝对过期 |
指定某项在设定的时间过期,而不考虑访问频率。例如,可以将某项设置为在 6:00 PM 过期,或四小时后过期。 |
依赖项:可以将缓存中某一项的生存期配置为依赖于其他应用程序元素,如某个文件或数据库。当缓存项依赖的元素更改时,ASP.NET 将从缓存中移除该项。ASP.NET 缓存支持下表中描述的依赖项。
依赖项 | 说明 |
---|---|
键依赖项 |
应用程序缓存中的项存储在键/值对中。键依赖项允许项依赖于应用程序缓存中另一项的键。如果移除了原始项,则具有键依赖关系的项也会被移除。例如,可以添加一个名为 ReportsValid 的缓存项,然后缓存若干个依赖于 ReportsValid 键的报告。当 ReportsValid 项被移除时,所有依赖于它的缓存报告同样也会从缓存中移除。 |
文件依赖项 |
缓存中的项依赖于外部文件。如果该文件被修改或删除,则缓存项也会被移除。 |
SQL 依赖项 |
缓存中的项依赖于 Microsoft SQL Server 2005、SQL Server 2000 或 SQL Server 7.0 数据库中表的更改。对于 SQL Server 2005,缓存中的项可依赖于表中的某一行。有关更多信息,请参见使用 SqlCacheDependency 类在 ASP.NET 中缓存。 |
聚合依赖项 |
通过使用 AggregateCacheDependency 类缓存中的项依赖于多个元素。如果任何依赖项发生更改,该项都会从缓存中移除。 |
自定义依赖项 |
可以用您自己的代码创建的依赖关系来配置缓存中的项。例如,可以创建一个自定义 Web 服务缓存依赖项,当调用 Web 服务得到一个特定值时,该依赖项就会从缓存中移除数据。 |