概述
缓存功能是大型网站设计时要考虑的一个很重要的部分。
从分布上看,可以将缓存分为客户端缓存、服务端缓存和第三方缓存。
客户端缓存
访问一个网站时,浏览器会缓存静态资源,如图片等。以后再访问的时候,它会优先使用本地缓存的文件。只有服务器端的文件更新了,或是缓存中的文件过期了,才会再次从服务端下载这些内容。
服务端缓存
服务器端缓存从性质上可分为两种:静态文件缓存和动态缓存。
静态文件缓存
如果静态页面较多,且很少改动,那么这种文件最适合静态缓存。IIS6.0将这部分内容直接放在Kernel的内存中,由Http.Sys直接管理,性能非常高。用户的请求如果在缓存中,那么Http.Sys会直接将内容发送到Network Driver上。而之前版本,则需要先将内容从IIS的User Space复制到Kernel中,然后再发送到TCP/IP Stack上。Kernel Level Cache 几乎是现在高性能Web Server的一个必不可少的特性。
另外,如果愿意,静态文件还可以压缩(动态文件也可以压缩,但费效比不是很高,因为每次都要压缩,不能一劳永逸),压缩的东西放到一个IIS指定的一个地方。如果客户端Browser支持相应的解压缩,那么压缩的内容将发送回去,解压缩工作由客户端来完成。Browser在向Web server发送请求的时候,HTTP Request Header里面有是否支持压缩的信息。
动态缓存
动态缓存的难点在于内容的过期校验和更新处理。
应用程序数据缓存
System.Web.Caching命名空间提供用于缓存服务器中常用数据的类。此命名空间包括Cache类,该类是一个字典,可以存储任意数据对象,如哈希表和数据集。
它还为这些对象提供了失效功能,并提供了添加和移除这些对象的方法。
你还可以添加依赖于其它文件或缓存项的对象,并在从Cache对象中移除对象时执行回调以通知应用程序。
System.Web.Caching.CacheobjCache=HttpRuntime.Cache.
objCache.Insert(strKey,objObject,null,absoluteExpiration,slidingExpiration)
文件缓存依赖
这种策略让缓存依赖于一个指定的文件,通过改变文件的更新日期来清除缓存。
这种方式非常适合读取配置文件的缓存处理。
在负载均衡的情况下,多个Web应用的缓存可依赖于同一个共享文件。
System.Web.Caching.CacheDependency dep=newSystem.Web.Caching.CacheDependency("C:\\test.txt");
var objCache=HttpRuntime.Cache;
objCache.Insert(cacheKey,objObject,dep,Cache.NoAbsoluteExpiration,Cache.NoSolidingExpiration,CacheItemPriority.Default,null)
数据库缓存依赖
这种策略让缓存依赖数据库,只有数据变化的时候才更新缓存。
使用System.Web.Caching.SqlCacheDependency类,并进行相应的配置
1. 配置站点Web.Config
<system.web>
<sqlCacheDependencyenabled="true" pollTime="6000">
<databases>
<addname="db1" connectionStringName="dbConnect1"/>
</databases>
</sqlCacheDependency>
</system.web>
2. 在代码中配置数据库权限
SqlCacheDependencyAdmin.EnableTableForNotifications("db1","P_ table1");
3. 代码调用
vardep=new SqlCacheDependency("db1","P_table1");