缓存 <caching>
概述
<caching>
元素可以启用或禁用 Internet Information Services (IIS) 7 应用程序的页面输出缓存。 此元素还允许你配置 IIS 在用户模式和/或内核模式中缓存页面输出,以及要施加的输出缓存限制(如果有的话)。
<caching>
元素还包含一个 <profiles>
元素,后者包含可应用于 ASP.NET 页的输出缓存设置的集合。
页面输出缓存在浏览器请求动态页面(如 ASP 页面或 ASP.NET 页面)后将其响应存储在内存中。 当后续请求到达页面时,服务器会发送缓存的响应,而不是重新处理页面。 ASP.NET 页输出缓存与 IIS 7 输出缓存无关。 在使用集成 ASP.NET 模式的应用程序中,可以通过编程方式将 ASP.NET 页面输出缓存用于任何内容类型,这与 IIS 7 输出缓存非常相似。
页面输出缓存可减少服务器的负载和响应时间。 输出缓存最适用于半动态的页面,例如 ASP.NET 页面,这些页面所依赖的数据库表很少发生变化。
对于静态文件(如 HTML、JPG 或 GIF 文件),输出缓存没有必要,并且对于从频繁更改的数据库中读取的动态 ASP.NET 或 PHP 页面,输出缓存可能会导致更多的内存开销。
兼容性
版本 | 说明 |
---|---|
IIS 10.0 | <caching> 元素在 IIS 10.0 中未进行修改。 |
IIS 8.5 | <caching> 元素在 IIS 8.5 中未进行修改。 |
IIS 8.0 | <caching> 元素在 IIS 8.0 中未进行修改。 |
IIS 7.5 | <caching> 元素未在 IIS 7.5 中进行修改。 |
IIS 7.0 | <caching> 元素是在 IIS 7.0 中引入的。 |
IIS 6.0 | 空值 |
安装
<caching>
元素包含在 IIS 7 的默认安装中。
操作方式
如何配置页面输出缓存
打开 Internet Information Services (IIS) 管理器:
如果使用的是 Windows Server 2012 或 Windows Server 2012 R2:
- 在任务栏上,单击“服务器管理器”,单击“工具”,然后单击“Internet Information Services (IIS)管理器”。
如果使用的是 Windows 8 或 Windows 8.1:
- 按住 Windows 键,按字母 X,然后单击“控制面板”。
- 单击“管理工具”,然后双击“Internet Information Services (IIS) 管理器”。
如果使用的是 Windows Server 2008 或 Windows Server 2008 R2:
- 在任务栏上,单击“开始”,指向“管理工具”,然后单击“Internet Information Services (IIS)管理器”。
如果使用的是 Windows Vista 或 Windows 7:
- 在任务栏上,单击“开始”,然后单击“控制面板”。
- 双击“管理工具”,然后双击“Internet Information Services (IIS) 管理器”。
在“连接”窗格中,转到要为其配置页面输出缓存的连接、站点、应用程序或目录。
在“开始”窗格中,滚动到“输出缓存”,然后双击“输出缓存”。
在“操作”窗格中,单击“添加...”。
在“添加缓存规则”对话框中,在“文件扩展名”框中键入要缓存的文件扩展名,然后选择“用户模式缓存”选项和/或“内核模式缓存”选项。
选择要用于缓存的选项,然后单击“确定”。
配置
可以使用 ApplicationHost.config 文件在服务器级别配置 <caching>
元素,也可以使用 Web.config 文件在站点、应用程序或目录级别配置。
特性
属性 | 说明 |
---|---|
enabled |
可选布尔属性。 指定是否启用页面输出缓存。 默认值为 true 。 |
enableKernelCache |
可选布尔属性。 指定是否启用内核缓存。 默认值为 true 。 |
maxCacheSize |
可选 uint 属性。 指定输出缓存的最大大小。 注意:此设置仅在 ApplicationHost.config 文件的级别有效。 如果在更低级别设置此属性,此属性将无效。 默认值为 0 。 |
maxResponseSize |
可选 uint 属性。 指定可缓存的最大响应大小。 注意:此设置仅在 ApplicationHost.config 文件的级别有效。 如果在更低级别设置此属性,此属性将无效。 默认值为 262144 。 |
子元素
元素 | 说明 |
---|---|
profiles |
可选元素。 包含一组可应用于 ASP.NET 页的输出缓存设置。 |
配置示例
以下配置示例启用用户模式缓存和内核模式缓存,这两者在 IIS 7.0 中默认处于启用状态。 还使用 <profiles>
元素所包含的 <add>
元素为文件扩展名为 .asp 的文件启用输出缓存。 还使用 policy 属性输出页面,直到页面更改;使用 kernelCachePolicy 属性对内核缓存执行相同的操作。
<configuration>
<system.webServer>
<caching enabled="true" enableKernelCache="true">
<profiles>
<add extension=".asp" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" />
</profiles>
</caching>
</system.webServer>
</configuration>
下面的代码示例将最大输出缓存大小设置为 1 GB,并将可存储在输出缓存中的响应的最大大小设置为 512 KB。
<configuration>
<system.webServer>
<caching enabled="true" enableKernelCache="true" maxCacheSize="1000" maxResponseSize="512000"/>
</system.webServer>
</configuration>
代码示例
以下示例配置文件扩展名为 .asp 的文件的页面输出缓存,并将 IIS 配置为在用户模式和内核模式下缓存,直到 ASP 文件更改。
AppCmd.exe
appcmd.exe set config -section:system.webServer/caching /+"profiles.[extension='asp',policy='CacheUntilChange',kernelCachePolicy='CacheUntilChange']" /commit:apphost
注意
使用 AppCmd.exe 配置这些设置时,必须确保将 commit 参数设置为 apphost
。 这会将配置设置提交到 ApplicationHost.config 文件中的相应位置部分。
C#
using System;
using System.Text;
using Microsoft.Web.Administration;
internal static class Sample {
private static void Main() {
using(ServerManager serverManager = new ServerManager()) {
Configuration config = serverManager.GetApplicationHostConfiguration();
ConfigurationSection cachingSection = config.GetSection("system.webServer/caching");
ConfigurationElementCollection profilesCollection = cachingSection.GetCollection("profiles");
ConfigurationElement addElement = profilesCollection.CreateElement("add");
addElement["extension"] = @"asp";
addElement["policy"] = @"CacheUntilChange";
addElement["kernelCachePolicy"] = @"CacheUntilChange";
profilesCollection.AddAt(0, addElement);
serverManager.CommitChanges();
}
}
}
VB.NET
Imports System
Imports System.Text
Imports Microsoft.Web.Administration
Module Sample
Sub Main()
Dim serverManager As ServerManager = New ServerManager
Dim config As Configuration = serverManager.GetApplicationHostConfiguration
Dim cachingSection As ConfigurationSection = config.GetSection("system.webServer/caching")
Dim profilesCollection As ConfigurationElementCollection = cachingSection.GetCollection("profiles")
Dim addElement As ConfigurationElement = profilesCollection.CreateElement("add")
addElement("extension") = "asp"
addElement("policy") = "CacheUntilChange"
addElement("kernelCachePolicy") = "CacheUntilChange"
profilesCollection.AddAt(0, addElement)
serverManager.CommitChanges()
End Sub
End Module
JavaScript
var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var cachingSection = adminManager.GetAdminSection("system.webServer/caching", "MACHINE/WEBROOT/APPHOST");
var profilesCollection = cachingSection.ChildElements.Item("profiles").Collection;
var addElement = profilesCollection.CreateNewElement("add");
addElement.Properties.Item("extension").Value = "asp";
addElement.Properties.Item("policy").Value = "CacheUntilChange";
addElement.Properties.Item("kernelCachePolicy").Value = "CacheUntilChange";
profilesCollection.AddElement(addElement, 0);
adminManager.CommitChanges();
VBScript
Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set cachingSection = adminManager.GetAdminSection("system.webServer/caching", "MACHINE/WEBROOT/APPHOST")
Set profilesCollection = cachingSection.ChildElements.Item("profiles").Collection
Set addElement = profilesCollection.CreateNewElement("add")
addElement.Properties.Item("extension").Value = "asp"
addElement.Properties.Item("policy").Value = "CacheUntilChange"
addElement.Properties.Item("kernelCachePolicy").Value = "CacheUntilChange"
profilesCollection.AddElement addElement, 0
adminManager.CommitChanges()