随笔- 60  文章- 14  评论- 17 

概述

缓存功能是大型网站设计时要考虑的一个很重要的部分。

从分布上看,可以将缓存分为客户端缓存、服务端缓存和第三方缓存。

客户端缓存

         访问一个网站时,浏览器会缓存静态资源,如图片等。以后再访问的时候,它会优先使用本地缓存的文件。只有服务器端的文件更新了,或是缓存中的文件过期了,才会再次从服务端下载这些内容。

服务端缓存

         服务器端缓存从性质上可分为两种:静态文件缓存和动态缓存。

静态文件缓存

如 果静态页面较多,且很少改动,那么这种文件最适合静态缓存。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");

 posted on 2016-06-15 16:40  heoo  阅读(...)  评论(...编辑  收藏