Asp.net常用缓存技术简介
cpu像个老牛一样,干活非常快(执行速度非常快),而硬盘的读写速度非常慢,像个蜗牛一样,我们写的应用程序说白了就是cpu执行的指令的集合。如果没有缓存的话,cpu就会不停的等待,效率就会变得非常低,而我们的内存每秒钟能够读写执行几千条,我们磁盘上的指令就可以加载在内存中,内存将数据准备好后送给cpu执行。如果内存中没有指令了那么就从磁盘当中读取,这样就解决了cpu执行效率低的问题。
缓存是一种用空间换取时间的技术,用来将一些慢速设备中的常用数据保存在快速设备中,取数据的时候直接从快速设备中取,它是改进网站性能的第一个手段,Asp.net缓存主要分为:页面缓存,数据源缓存,数据缓存。灵活性从高到低依次为数据缓存,数据源缓存,页面缓存。
1.页面缓存:
给页面添加<%@ OutputCache Duration="5" VaryByParam="*" %>
Duration表示哈U内存事件,以秒为单位,超出后缓存失效,再次生成以后还会缓存5秒。
这样就可以启用页面缓存,整个页面的内容都会被缓存,页面中的asp.net,数据等在缓存期间不会被运行,而是直接输出缓存的内容。
注意,这个缓存是在服务器端而不是在客户端,用HttpWacth也能看出服务器返回的响应。常用语帖子,新闻,视频之类的页面缓存。它在整个Aspnet应用程序生命周期第七个事件完了之后就不再继续往下执行了。
2.数据源缓存
设定ObejectDataSource的CacheDuration(缓存时间:秒),EnableCaching=true,这样每隔CacheDuration指定的时间段才调用SelectMode执行的方法类执行数据库查询,其它时候都是直接返回内存的数据。在缓存期间,绑定控件向ObjectDataSource要数据,ObejectDataSource直接将缓存的数据返回给控件。不要去向TypeName指向的类要数据。
3.开发人员自定义缓存
if(!IsPostBack)
{
//在缓存中写入数据
Cache.Insert("de","sssss");//这就是在缓存中写东西了
//缓存中的内容是不会丢失的,只有当进程关闭了cache才会消失释放,在此期间,线程是安全的。
//最后一个参数是滑动过期时间,如果有过期时间的限制,那么滑动过期时间一定要设置为Zero.
Cache.Insert("de","sssssssss",null,DataTime().Now,AddSencond(10),TimeSpan.Zero);
//滑动窗口机制
Cache.Insert("de", "ssssss", null, DateTime.MaxValue, new TimeSpan(0,0,3));
}
4.数据库缓存依赖:
-S服务器名称 -E集成身份验证 -ed启动 -d数据库名称 -et指定缓冲依赖的表名 -t表名
在vs2010的命令提示符中运行(切换到aspnet_regsql.exe所在的目录)
aspnet_regsql -S . -E -ed -d HKCorpData -et -t HKSJ_USERS
依赖于数据库的web.config配置
<system.web>
<caching>
<sqlCacheDependency enabled="true">
<databases>
<add name="BookRegulation" connectionStringName="connectionString" pollTime="500"/>
</databases>
</sqlCacheDependency>
</caching>
在page页面中:
//当依赖的表发生变化时,缓存失效
System.Web.Caching.SqlCacheDependency dep = new System.Web.Caching.SqlCacheDependency("BookRegulation", "Branch");
Cache.Insert("list", list, dep, System.Web.Caching.Cache.NoAbsoluteExpiration, System.Web.Caching.Cache.NoSlidingExpiration);