缓存管理
缓存是提高性能的非常重要的途径和手段,大型asp.net项目尤其需要这种手段和技术,这里详细一下缓存,一般缓存分为:客服端缓存,服务器端缓存,第三方缓存
1.客服端缓存
这点相信大家都有直观的印象,比如第一次访问该网站的时候速度很慢,而第二次再次访问的时候速度很快,原因就在于客服端的缓存,现在的浏览器都是比较智能的,他会在客服端的机器的硬盘上保留许多静态文件比如各种Gif,JPEG文件等,等下次访问他的时候尽量使用本地资源,只有服务器端数据过期啦,他在从服务器端下载,很多时候都是浏览器帮我们做了缓存
2.服务器端缓存
服务器端缓存分为: 静态文件缓存 动态缓存
1 静态文件缓存
很多页面是静态的,很少改动,这种文件适合做静态缓存,现在iis6都是将内容直接存放在Kernel内存中,由http.SYS直接管理,由于在Kernel里所以速度特别快,通过http.SYS将内容发送到NetWork Driver上去,不要像以前iis的User Space的内存copy到Kernel中在经过一系列操作
2动态缓存
动态缓存是比较困难的,要注意是不是内容过时了,动态缓存的几种常用手段
1.传统的缓存方式
2.页面输出缓存
3.页面局部缓存
4.利用.net提供的System.Web.Caching缓存
5.缓存依赖
一:传统缓存方式:经常重复利用的东西放到Application或是Session中去例如
Session["Style"]=val;
Application["Count"]=0;
二:页面输出缓存
1)是将整个asp.net页面保存在服务器上,适合大量数据,而且不需要经常修改的数据只需在asp.net页面顶部加上
<%@ OutputCache Duration="60" VaryByPAram="none">
OutputCache 是缓存时间是秒,是必须选项否则会报错
VaryByParam是根据页面使用的Post,get发送的名值对参数来更新缓存的内容,如果不需要根据参数来更新则设置none,需要的话,只需指明参数即可,多个参数用分号隔开如:
<%@ OutputCache Duration="60" VaryByParam="p">
则 webform.aspx?p=1变化一次,webform.aspx=2在缓存一次
多个参数项形式:
<%@ OutputCache Duration="60" VaryByParam="p;n"%>
2)CacheProfile
通过Web.Config配置文件设置缓存的时间,这是可选属性,默认值空字符("")
<system.web>
<Caching>
<outputCacheSetting>
<outputcacheProfile>
<addd name="CacheTest" duration="50">
</outputcacheProfile>
</outputCacheSetting>
</Caching>
</system.web>
则在页面中
<%@ OutputCache Duration="CacheTest" VaryByParam="none" %>
注意用户控件不支持页面缓存
3)VaryByControl
通过服务器的控件来改变缓存
<%@ OutputCache Duration="60" VaryByParam="none" VaryByControl="DropDownList1" %>
则他会根据页面的DowpDownList1这个控件来发生改变
4)页面输出缓存ApI
是通过Response的cache属性来获取页面缓存的策略核心是net组建System.web.httpCachePolicy
几个常用方法
1.SetExpires设置缓存时间
Response.Cache.SetExpires("6:00");
等等
三:页面局部缓存
1.控件缓存(片段缓存)
2.缓存后替换
就是在一个asp.net页面中既有动态内容又有静态页面,则只对静态页面进行缓存
声明的方式使用Substitution
编程的方式使用Substitution
隐式的方式使用
Substitution控件的使用:局部动态更新的思想
例如:在Asp.net页面中写
<%@ outputCache Duration="60" VaryByParam="none"%>
也就先缓存整个页面然后用这个控件指定不需要缓存的方法
<asp:Substitution ID="ss" runat="server" MethodName="getCurrent"/>
后台则
Public static string getCurrent(HttpContext contet)
{
}
注意:静态的,返回string,参数类型HttpContext
四:应用程序缓存
由System.Web.Caching类提供提供Cache类,该类的操作是一个字典应用程序如下:
System.Web.Caching.Cache objCache=HttpRuntime.Cache;
Return objCache[CacheKey];
objCache.Insert(键值,值)
这种方法很好的解决了缓存,但是数据发生变化的时候,而缓存里还是过期的数据
五:文件缓存依赖
这种策略依赖与一个缓存文件,通过改变文件的日期来改变文件
如:参数1.键值,缓存对象,依赖对象
Public static void SetCache(string cacheKey, object objCache,System.Web..Caching.CacheDependency dep){}
这种方法缓存比较松散不适合用大型的缓存
六数据库缓存依赖
更多的时候我们服务器性能损耗在查询数据库的时候,所以对数据库实现缓存,但是要达到更新数据和缓存数据的统一则net为我们提供了SqlCacheDependency数据库缓存依赖
1.修改web.config文件,让项目启用SqlCacheDenpency
2.在《appSettings>下
<connectionStrings>
<add name="str" connectionString="data Source=.; ....>
</connectionStrings>
在<system.web>下
<caching>
<SqlCacheDenpency enabled="true" pollTime="6000">
<database>
<add name="ss" connectionStringName="str"/>
.....
注意哦: connectionStringName="str"与数据库的name名称相同
七:分布式系统缓存Memcached
---------