OutputCache缓存各参数的说明
缓存时间,以秒为单位,这个除非你的Location=None,可以不添加此属性,其余时候都是必须的。
Location
Location当被设置为None时,其余的任何设置将不起作用
Any——页面被缓存在浏览器、代理服务器端和web服务器端;
Client——缓存在浏览器;
DownStream——页面被缓存在浏览器和任何的代理服务器端;
None——页面不缓存;
ServerAndClient——页面被缓存在浏览器和web服务器端;
默认为Any 。
!该属性不支持用户控件(.ascx文件)中的@OutputCache指令。
Shared
用来控制用户控件输出内容是否能够被多个页面共享。默认值为false。
!该属性不支持ASP.NET页面(.aspx文件)中的@OutputCache指令。
VaryByCustom
任何自定义输出缓存的文字。如果将该属性设置为browser,将会缓存多种的浏览器名称与版本信息。当使用了自定义字符串之后,就必须在应用程序的Global.asax文件中对HttpApplication.GetVaryByCustomString成员进行重载。
VaryByHeader
多个不同输出缓存所使用的HTTP响应头信息,并且通过分号进行分隔。当设置为多个响应头信息时,输出缓存将会为每个已指定的头信息缓存多个不同版本的响应文档。
Accept-Language——代表请求页面中用户最希望的有优先级顺序的人类语言列表;
User-Agent——代表请求页面设备的类型;
Cookie——代表当前域名下创建的浏览器的cookie。项。
用户控件中的@OutputCache指令不支持该属性。
例如:设置VaryByHeader="Accept-Language"
当网站有多种语言版本时,可以为每种语言都进行缓存
可以更改IE的语言设置:IE—>工具àInternet选项à常规à语言来查看效果
VaryByParam
用于多个输出缓存的字符串列表,并以分号进行分隔。默认时,该字符串与GET方法传递的参数或与POST方法传递的变量相对应。当被设置为多个参数时,输出缓存将会为每个参数都准备一个与之相对应的文档版本。可能值包括none,*,以及任何有效的查询串或POST参数名称。
如果您不想要为不同的已缓存内容指定参数,可以将其设置为none。如果想要指定所有的已缓存内容参数,可以设置为*。
例如:
如果命令设置为:
<%@ OutputCache Duration="60" VaryByParam="ProductType" %>
当请求路径 bitauto.com/test.aspx?ProductType=1发生时,会建立缓存
当ProductType的值变为2时,系统会建立新的缓存,但是原来的缓存在有效期内并不会失效。相当于为不同的ProductType值建立了不同版本的缓存。如果熟悉.Net数据缓存的话,很类似于下面的用法。
Cache.Add(“productType1”,cachedObject)
Cache.Add(“productType2”,cachedObject)
VaryByControl
指定用户控件的输出缓存列表,并以分号作为分隔。字符串由被定义在用户控件中的ASP.NET服务器端控件的ID属性组成。
例如下面:根据页面上下拉列表控件的选择的值不同进行不同的缓存输出
<%@ OutputCache Duration="100" VaryByControl="dropTest"%>
SqlDependency
指定缓存失效的数据库依赖项。可以具体到数据库和表。
具体配置具体要经过几个步骤:
1. 注册连接池
命令:aspnet_regsql -S 192.168.30.220/SQL2K -U sa -P sa -ed -d pubs -et -t test专门注册连接池的工具 在sql数据库的数据 库改变了,才改变缓存。
参数: _s 制定注册的服务器
_u和 _p 说明是sql数据库的授权模式、
_d 指定数据库的名字
_ed 说明缓存生效。
示例:
aspnet_regsql -S 192.168.30.220/SQL2K -U sa -P sa -ed -d pubs -et -t test
进行outputcache配置
<%@ OutputCache SqlDependency="pubs:test" Duration="100" VaryByParam="id"%>
2. 设置WebConfig
<connectionStrings>
<add name="mySqlServer" connectionString="Server=192.168.30.220/SQL2K;Database=pubs;uid=sa;pwd=sa;"/> </connectionStrings>
3.
<caching>
<sqlCacheDependency enabled="true">
<databases>
<add
connectionStringName="mySqlServer"
pollTime="500" />
</databases>
</sqlCacheDependency>
</caching>
name:必须是数据库的名字
connectionStringName:连接字符串的名称
除了可以建立数据库依赖,还可以建立文件依赖或者其他依赖(可以看”参考文档5”)。
CacheProfile
用于定义与该页关联的缓存设置的名称。是可选属性,默认值为空字符("")。需要注意的是,包含在用户控件中的@ OutputCache指令不支持此属性。在页面中指定此属性时,属性值必须与Web.config文件<outputCacheSettings>配置节下的outputCacheProfiles元素中的一个可用项的名称匹配。如果此名称与配置文件项不匹配,将引发异常。
示例:
<%@ OutputCache CacheProfile="Cache30Seconds" %>
配置:
Web.config
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="Cache30Seconds" duration="30"
varyByParam="none" />
</outputCacheProfiles>
</outputCacheSettings>
</caching>
Add节里面的各个属性和OutPutCache相对应
注意OutputCache生命优先于outputCacheProfiles配置
比如:页面缓存10s, outputCacheProfiles设置缓存20s,则最后缓存10s
NoStore
bool值,用于决定是否阻止敏感信息的二级存储,默认值为 false
DiskCacheable:
在.Net 2.0被遗弃
注:标红的是经常用的属性。
UserControl和Page中各命令参数比较(空 表示不支持)
|
简单介绍 |
Control |
Page |
|
|
Duration |
缓存时间 |
支持 |
支持 |
|
Location |
存储位置 |
支持 |
|
|
Shared |
多页面共享 |
支持 |
|
|
VaryByParam |
随参数改变 |
支持 |
支持 |
|
VaryByControl |
随控件改变? |
支持 |
|
|
VaryByHeader |
Http协议头 |
支持 |
|
|
VaryByCustom |
自定义改变值 |
支持 |
支持 |
|
SqlDependency |
Sql依赖 |
支持 |
支持 |
|
CacheProfile |
Cache配置节名称 |
支持 |
|
|
NoStore |
是否有其他存储介质 |
支持 |
UserControl和Page中的一些区别:
1.作用范围:UserControl为页面局部的缓存,Page为页面全部的缓存
2.优先级: Page缓存优先级高于UserControl
例如:
UserControl : <%@ OutputCache Duration="60" VaryByParam="ProductType" %>
Page : <%@ OutputCache Duration="60" VaryByParam=" none" %>
当ProductType =1改变时,Page缓存并不更新(UserControl并不更新)
如果Page去掉 OutputCache命令,则ProductType更新时,Page会更新(Control更新)
4. 页面生命OutPutCahe缓存策略优先于后台代码:
比如<%@ OutputCache Duration="100" Location="Any" %>缓存100S
代码:Response.Cache.SetExpires(DateTime.Now.AddMinutes(1));
结果缓存100秒
其他实现:
1.根据不同的语言缓存不同的版本:
Response.Cache.SetExpires(DateTime.Now.AddMinutes(1)); Response.Cache.SetCacheability(HttpCacheability.Public); Response.Cache.SetValidUntilExpires(true);
Response.Cache.VaryByHeaders["Accept-Language"] = true;
2.文档以来缓存:
Response.AddFileDependency(Server.MapPath(Request.ApplicationPath + "/Web.Config"));
Response.Cache.SetExpires(DateTime.Now.AddMinutes(1));
Response.Cache.SetCacheability(HttpCacheability.Public);
参考文档:
1. ASP.NET 缓存:方法和最佳实践
http://www.microsoft.com/china/MSDN/library/WebServices/ASP.NET/ASP.NETCaching-TechniquesandBestPractiCEs.mspx?mfr=true
2. 数据缓存中页面部分和用户控件部分的说明
http://www.cnblogs.com/chenou/articles/603547.html
3. ASP.NET缓存策略经验谈
http://www.cnblogs.com/imissherso/articles/635563.html
4. ASP.NET 2.0的页面缓存功能介绍
http://www.cnblogs.com/Joshualang/archive/2007/01/24/OutputCache.html
5. 移除用户控件的输出缓存(OutputCache)
http://www.cnblogs.com/Truly/archive/2006/10/12/527206.aspx
6. P.NET 2.0 缓存技术 (原创)
http://www.cnblogs.com/ghd258/archive/2005/11/03/248896.html
7. 页面输出缓存
http://www.cnblogs.com/hide0511/archive/2006/10/21/535702.html
OutputCache缓存各参数的说明的更多相关文章
- C# ObjectCache、OutputCache缓存
/// <summary> /// 缓存操作类 /// </summary> public class Cache { private static List<strin ...
- 转载ASP.net 中 OutputCache 指令各个参数的作用
使用@ OutputCache指令 使用@ OutputCache指令,能够实现对页面输出缓存的一般性需要.@ OutputCache指令在ASP.NET页或者页中包含的用户控件的头部声明.这种方式非 ...
- MVC中配置OutputCache的VaryByParam参数无效的问题
在项目使用OutputCacheAttribute是遇到了问题,当我想在配置文件web.config中配置OutputCache的VaryByParam时竟然不起作用,下面是相关代码: 文件FaceC ...
- ASP.net 中 OutputCache 指令各个参数的作用
使用@ OutputCache指令 使用@ OutputCache指令,能够实现对页面输出缓存的一般性需要.@ OutputCache指令在ASP.NET页或者页中包含的用户控件的头部声明.这种方式非 ...
- ASP.net 中 OutputCache 指令各个参数的作用。
使用@ OutputCache指令 使用@ OutputCache指令,能够实现对页面输出缓存的一般性需要.@ OutputCache指令在ASP.NET页或者页中包含的用户控件的头部声明.这种方式非 ...
- [置顶]
MVC输出缓存(OutputCache参数详解)
1.学习之前你应该知道这些 几乎每个项目都会用到缓存,这是必然的.以前在学校时做的网站基本上的一个标准就是1.搞定增删改查2.页面做的不要太差3.能运行(ps真的有这种情况,答辩验收的时候几个人在讲台 ...
- MVC输出缓存(OutputCache参数详解)
版权声明:本文为博主原创文章,未经博主允许转载随意. https://blog.csdn.net/kebi007/article/details/59199115 1.学习之前你应该知道这些 几乎每个 ...
- OutputCache各参数的说明
OutputCache各参数的说明 Duration 缓存时间,以秒为单位,这个除非你的Location=None,可以不添加此属性,其余时候都是必须的. Location Location当被设置为 ...
- .Net页面缓存OutPutCache详解
一 它在Web.Config中的位置 <system.web> <!--页面缓存--> <caching> <outputCacheSettings> ...
随机推荐
- SPOJ NSUBSTR Substrings 后缀自动机
人生第一道后缀自动机,总是值得纪念的嘛.. 后缀自动机学了很久很久,先是看CJL的论文,看懂了很多概念,关于right集,关于pre,关于自动机的术语,关于为什么它是线性的结点,线性的连边.许多铺垫的 ...
- hdu 1757 A Simple Math Problem (矩阵快速幂,简单)
题目 也是和LightOJ 1096 和LightOJ 1065 差不多的简单题目. #include<stdio.h> #include<string.h> #include ...
- IP地址总结
1.网际协议IP : 网际协议 IP 是 TCP/IP 体系中两个最主要的协议之一.与 IP 协议配套使用的还有四个协议: 地址解析协议 ARP (Address Resolution Protoco ...
- mysql建表时拆分出常用字段和不常用字段
一对一 一张表的一条记录一定只能与另外一张表的一条记录进行对应,反之亦然. 学生表:姓名,性别,年龄,身高,体重,籍贯,家庭住址,紧急联系人 其中姓名.性别.年龄.身高,体重属于常用数据,但是籍贯.住 ...
- ExecutorService中submit和execute的区别
在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于新的启动.调度.管理线程的一大堆API了.在Java5以后,通过Executor来启动线程比用Thread的start()更好.在新特征中 ...
- TCL语言笔记:TCL基础语法
一.什么是TCL Tcl 全称是 Tool command Language.它是一个基于字符串的命令语言,基础结构和语法非常简单,易于学习和掌握. Tcl 语言是一个解释性语言,所谓解释性是指不象其 ...
- JavaWeb项目开发案例精粹-第3章在线考试系统-005action层
1. <?xml version="1.0" encoding="UTF-8" ?><!-- XML声明 --> <!DOCTYP ...
- java:抽象类和抽象函数
面向对象:先抽象后具体 抽象类也叫基类 抽象函数:只有函数的定义,没有函数体的函数, 语法:类必须定义为抽象类,才能调用抽象函数,抽象类里面可以没有抽象函数 abstract class Printe ...
- 254. Factor Combinations
题目: Numbers can be regarded as product of its factors. For example, 8 = 2 x 2 x 2; = 2 x 4. Write a ...
- 异常:Caused by: java.lang.NoClassDefFoundError: Could not initialize class net.sf.log4jdbc.Properties
参考文章: 使用Log4jdbc-log4j2监听MyBatis中运行的SQL和Connection 使用 log4jdbc格式化输出SQL,maven配置如下: <dependency> ...