本文内容
- 缓存方式
- 自动移除
- 应用程序缓存依赖
在 Web 应用程序开发中,缓存对应用程序性能的提高有很大帮助。比如,在同一个应用中,经常发生对同一数据、逻辑功能和用户界面的多次请求。当用户的基数很大时,如果每次的请求都进行处理,则会消耗很多的服务器资源。另外,有时服务器提供的数据服务可能会意外地停止,使用缓存技术可以在一定时间内仍然正常地提供对最终用户的支持,提高系统的可用性。因此,将不怎么改变的数据缓存起来,如国家列表等,就能明显提高Web应用程序的反应速度。缓存技术就是将访问频率或是构造成本高的数据缓存在内存中,避免数据的重复创建、处理和传输。
缓存方式
ASP.NET中的缓存大体上分为两种方式:应用程序缓存和页面输出缓存。前者用编程的方式来缓存数据,这是本文主要说明的东西;后者是通过配置每个页面或是Web.config文件来实现的。而页面输出缓存有两种方式,一是缓存整个页面,一是缓存部分页面……这部分的内容以后再说。
自动移除
ASP.NET从缓存中自动移除数据的原因是以下之一:
- 服务器内存过低;
- 缓存项过期;
- 缓存项依赖改变。
应用程序缓存依赖
缓存依赖可以有以下几种方式:键和值依赖;文件依赖,缓存项依赖于一个外部文件,比如XML文件,如果这个文件被修改或删除,则缓存项将被移除;SQL依赖,缓存项依赖于Microsoft SQL Server 2005、SQL Server 2000、或是SQL Server 7.0数据库的一个表,对于SQL Server 2005,缓存项可以依赖表中的一条记录;聚合(Aggregate)依赖,缓存项同时依赖于前边的几种情况,比如一个缓存项同时依赖于另一个缓存项和外部文件,如果其中一个改变,则缓存项将被移除;自定义依赖。
如何向缓存中添加缓存项
你可以在应用程序中使用Cache对象访问缓存项。使用Cache对象的Insert方法将一个缓存项添加到应用程序缓存中,该方法有很多重载方法,让你用不同的缓存策略将一个缓存项添加到缓存中。
如果你用Insert方法向缓存中添加缓存项,并且缓存中存在同名缓存项,那么,缓存中的同名缓存项将被替换(覆盖)。
你也可以使用Add方法将缓存项添加到缓存中,添加的方法同Insert一样。Add方法会返回你添加到缓存中的对象。另外,如果使用Add方法添加缓存项,并且缓存中存在同名缓存项,那么这个同名缓存项将不会被替换,也不会产生异常。
本文说明根据不同的缓存策略将缓存项添加到应用程序缓存的方法:
- 通过设置键和值,直接将一个缓存项添加到应用程序缓存。
- 通过Insert方法将缓存项添加到应用程序缓存。
- 添加一个带缓存依赖的缓存项到应用程序缓存。当缓存依赖发生变化时,这个缓存项将被从缓存中移除。你可以设置基于其他缓存项、文件或是多个对象的缓存依赖。
- 添加一个带过期策略的缓存项到应用程序缓存。除了可以设置缓存依赖外,你也可以设置缓存项在一段时间后过期(滑动过期时间)或是在一个规定的时间过期(绝对过期时间),不能同时规定这两个过期时间。
- 添加一个带缓存优先级的缓存项到应用程序缓存。缓存优先级可以帮助.NET框架决定哪个缓存项先被移除。
- 通过Add方法添加一个缓存项到应用程序缓存。
除了以上的缓存依赖外,你可以在数据库的表上创建缓存依赖,或是自定义缓存依赖。通过CacheItemRemovedCallback委托,当从缓存中移除缓存项时,会提示应用程序。
以下是将缓存项添加到应用程序的具体方法:
1) 通过设置键和值,直接将一个缓存项添加到应用程序缓存。下面的代码演示键为“CacheItem1”,值为“Cached Item 1”的缓存项添加到缓存中: