15.5 技术解惑
15.5.1 缓存的优缺点
ASP.NET缓存的优点如下。
- 支持更为广泛和灵活的可开发特征。ASP.NET包含一些新增的缓存控件和API。例如,自定义缓存依赖、Substitution控件、页面输出缓存API等,这些特征能够明显改善开发人员对缓存功能的控制。
- 增强的可管理性。使用ASP.NET提供的配置和管理功能,可以更加轻松地管理缓存功能。
- 提供更高的性能和可伸缩性。通过ASP.NET提供的一些新功能,如SQL数据缓存依赖等,这些功能将帮助开发人员创建高性能、伸缩性强的Web应用程序。
- 缓存的优点是显而易见的,但是它也存在很大的缺点,那就是数据过期的问题。最典型的情况是,如果将数据库表中的数据内容缓存到服务器内存中,当数据库表中的记录发生更改时,Web应用程序则很可能显示过期的、不准确的数据。对于某些类型的数据,如果显示的信息过期,影响可能不会很大。但是,对于实时性要求比较严格的数据,如股票价格、拍卖出价之类信息,显示的数据稍有过期都是不可接受的。
15.5.2 如何从ASP.NET缓存中移除项
ASP.NET缓存中的数据是易失的,即不能永久保存。只要满足以下任一条件,缓存中的数据都可能会自动移除。
- 缓存已满。
- 该项已过期。
- 依赖项发生更改。
除了允许从缓存中自动移除项之外,还可以显示移除项。显示移除项可通过Remove方法实现。
通过调用Remove方法,可以传递要移除的项的键。例如下面的代码:
Cache.Remove("MyData1");
15.5.3 系统缓存的好处
举个简单的例子,如果想通过网页查询某些数据,而这些数据并非实时变化,或者变化的时间是有期限的,例如查询一些历史数据,那么每个用户每次查询的数据都是一样的。如果不设置缓存,ASP.NET就会根据每个用户的请求重复查询n次,这就增加了不必要的开销。所以,可能的情况下尽量使用缓存,从内存中返回数据的速度始终比去数据库中查询的速度快,因而可以大大提供应用程序的性能。毕竟现在内存非常便宜,用空间换取时间效率应该是非常划算的。尤其是对耗时比较长的、需要建立网络链接的数据库查询操作等。
缓存功能是大型网站设计的一个重要部分。由数据库驱动的Web应用程序,如果需要改善其性能,最好的方法是使用缓存功能。
15.5.4 服务器端缓存的两种类型
在ASP.NET应用中,有些数据没办法或是不宜在客户端缓存,那么我们只好在服务器端想想办法。服务器端缓存从性质上,又可分为静态文件缓存和动态缓存两种。
在ASP.NET中,常见的动态缓存主要有以下几种手段。
- 传统缓存方式。
- 页面输出缓存。
- 页面局部缓存。
- 利用.NET提供的System.Web.Caching 缓存。
- 缓存依赖。
15.5.5 提升ASP.NET应用程序的性能
要提升ASP.NET应用程序的性能,最简单、最有效的方式就是使用内建的缓存引擎。虽然也可以构建自己的缓存,但由于缓存引擎已提供了如此强大的功能,所以完全不必自找麻烦。在很大程度上,ASP.NET开发者在Web应用程序中,能将缓存引擎的功能直接包装到自己的数据表示及访问类中。
ASP.NET的缓存引擎支持如下3种类型的缓存。
- 整页输出缓存:在一个页被首次请求时,将该页呈现好的HTML内容全部缓存下来。后续请求将直接取用缓存副本。
- 部分缓存:是指缓存一部分HTML内容,这类似一个Web用户控件的输出。
- 数据缓存:关注的是单独的变量或数据项的缓存。它在比以上两种缓存类型都要低的一个级别上工作。