net缓存知识应用

缓存管理

缓存是提高性能的非常重要的途径和手段,大型asp.net项目尤其需要这种手段和技术,这里详细一下缓存,一般缓存分为:客服端缓存,服务器端缓存,第三方缓存

1.客服端缓存

 这点相信大家都有直观的印象,比如第一次访问该网站的时候速度很慢,而第二次再次访问的时候速度很快,原因就在于客服端的缓存,现在的浏览器都是比较智能的,他会在客服端的机器的硬盘上保留许多静态文件比如各种Gif,JPEG文件等,等下次访问他的时候尽量使用本地资源,只有服务器端数据过期啦,他在从服务器端下载,很多时候都是浏览器帮我们做了缓存

2.服务器端缓存

 服务器端缓存分为:  静态文件缓存  动态缓存

1 静态文件缓存

  很多页面是静态的,很少改动,这种文件适合做静态缓存,现在iis6都是将内容直接存放在Kernel内存中,由http.SYS直接管理,由于在Kernel里所以速度特别快,通过http.SYS将内容发送到NetWork Driver上去,不要像以前iisUser Space的内存copyKernel中在经过一系列操作

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"%>

2CacheProfile

通过Web.Config配置文件设置缓存的时间,这是可选属性,默认值空字符("")

<system.web>

<Caching>

<outputCacheSetting>

<outputcacheProfile>

<addd name="CacheTest" duration="50">

</outputcacheProfile>

</outputCacheSetting>

</Caching>

</system.web>

则在页面中

<%@ OutputCache Duration="CacheTest" VaryByParam="none" %>

 

注意用户控件不支持页面缓存

3VaryByControl

通过服务器的控件来改变缓存

<%@ OutputCache Duration="60" VaryByParam="none" VaryByControl="DropDownList1" %>

则他会根据页面的DowpDownList1这个控件来发生改变

4)页面输出缓存ApI

是通过Responsecache属性来获取页面缓存的策略核心是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

---------


版权声明:本文为Long_carol原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。