让你的 Web App 飞起来——利用 .Net 的缓存机制

     Web Application (互联网应用)系统的一个很大限制就是客户相应速度。应为要通过互联网进行通讯,所以必将受到速度的限制。正是这样所以提高互联网应用系统的速度是开发者必须面对的课题。
    今天在这里只从服务器端的利用缓存机制的角度来谈谈提高 Web App 的方法,所以不会包括客户端的页面缓存技术。
    首先让我们来分析一下是什么影响了 Web Application 的性能。首先从客户端发出web(定义为阶段A),再从数据库读取数据(阶段B),再根据页面周期生成页面(阶段C),最后将页面发送给远方的客户端(阶段D),完成一次 Web 应用。根据网上的资料在数据库操作(阶段B)上所花时间往往是最多的——并且占总时间的90%以上(我认为比较夸张,但毕竟是I/o操作)。 
    提高系统在阶段B的性能有常用的策略有异步操作(不讨论)和缓存机制。让系统在内存中保留第一次的数据库查询的结果,让后来的访问者可以从内存种直接获得结果而无需访问数据库。好注意!但现在的问题又出来了,客户端的请求是多样的,系统又如何将请求和缓存对应呢?虽然客户的请求是多样,但我们的关心却很简单。客户数据修改、数据插入、数据删除是不需要缓存的,我们要考虑的只剩下查询(select)操作了。那麽我们只要将查询条件和缓存建立键值对就可以解决了。 
    我想现在只剩下最后一个问题了,当另外一个客户修改了数据,系统是不是还到缓存中读取数据?当然不会!当数据修改后,必须要通知缓存,将缓存清空或更新。
    所有的注意听起来不错,但好像很复杂。其实这一切实现起来并不复杂。
    Sql2005 和 .Net 为我们准备好了一切。通过执行 aspnet_regsql.exe 命令可以在 Sql Server 中自动为我们建立起存储过程。通过这些设置当我们修改数据库时系统会自动通知.Net ,.Net 会自动清除相关的缓存。注意是相关缓存,就是说不仅被改变数据的缓存会被清除,而且与它相关的数据都会被清空,以保证数据的一致性。系统又怎么知道数据的相关性?
这就要我们在 web.config 中定义了。
   .Net 提供一下几个类为我们来自动完成所有缓存的操作。
SqlCacheDependency
AdminCachingDependency
Cache
大家可以通过 Msdn 查询。我在这里也不提供类似“HelloWorld()”的演示代码了。如果需代码要可以 mail 给我davyjiang@live.cn
posted @ 2008-05-09 14:04  老大卫  阅读(1131)  评论(2编辑  收藏  举报