15.1 缓存概述
知识点讲解:光盘:视频\PPT讲解(知识点)\第15章\缓存概述.mp4
在Web领域中,缓存的利用是不可或缺的。数据库查询可能是整个Web站点中调用最频繁,而执行速度最缓慢的操作之一。缓存机制正是解决这一缺陷的加速器。
15.1.1 ASP.NET缓存介绍
作为.Net框架下开发Web应用程序的主打产品,ASP.NET充分考虑了缓存机制。通过某种方法,将系统需要的数据对象、Web页面存储在内存中,使得Web站点在需要获取这些数据时,不需要经过繁琐的数据库连接、查询和复杂的逻辑运算,就可以“触手可及”,如“探囊取物”般容易而快速,从而提高整个Web系统的性能。
在ASP.NET 2.0之前的版本中,提供了两种基本的缓存机制。一种是应用程序缓存,它允许开发者将程序生成的数据或报表业务对象存入缓存中。另一种是页面输出缓存,利用它可以直接获取存储在缓存中的页面,而不需要经过对该页面的再次处理。
应用程序缓存其实现原理说来平淡无奇,仅仅是通过ASP.NET管理内存中的缓存空间。放入缓存中的应用程序数据对象,以键/值对的方式存储,这便于用户在访问缓存中的数据项时,可以根据key值判断该项是否存在缓存中。
存储在缓存中的数据对象,其生命周期是受到限制的,即使在整个应用程序的生命周期里,也不能保证该数据对象一直有效。ASP.NET可以对应用程序缓存进行管理,例如,当数据项无效、过期或内存不足时移除它们。此外,调用者还可以通过CacheItemRemovedCallback委托定义回调方法,使得数据项被移除时能够通知用户。
15.1.2 ASP.NET中的几种缓存
1.3种缓存形式
ASP.NET提供了3种主要形式的缓存:整页输出缓存、页面部分缓存(或称为片段缓存)和应用程序缓存(API缓存)。其中输出缓存和片段缓存的优点是非常易于实现,在大多数情况下,使用这3种缓存就足够了。而API缓存则提供了额外的灵活性(实际上是相当大的灵活性),可在应用程序的每一层利用缓存。
- 整页输出缓存
页面输出缓存是最为简单的缓存机制,该机制将全部ASP.NET页面内容保存在服务器内存中。当用户请求该页面时,系统从内存中输出相关数据,直到缓存数据过期。在这个过程中,缓存内容直接发送给用户,而不必再次经过页面处理生命周期。通常情况下,页面输出缓存对于那些包含不需要经常修改内容,但需要大量处理才能编译完成的页面特别有用。需要读者注意的是,页面输出缓存是将页面全部内容都保存在内存中,并用于完成客户端请求。
- 页面部分缓存
顾名思义,页面部分缓存是将页面部分内容保存在内存中,以便响应用户请求,而页面其他部分内容则为动态内容。页面部分缓存的实现有两种方式:控件缓存和缓存后替换。前者也称为片段缓存,这种方式允许将需要缓存的信息包含在一个用户控件内,然后将该用户控件标记为可缓存,以此来缓存页面输出的部分内容。这一方式缓存了页面中的特定内容,而没有缓存整个页面,因此,每次都需重新创建整个页。例如,如果要创建一个显示大量动态内容(如股票信息)的页面,其中有些部分为静态内容(如每周总结),这时可以将静态部分放在用户控件中,并允许缓存这些内容。缓存后替换与控件缓存正好相反。这种方式缓存整个页,但页中的各段都是动态的。例如,如果要创建一个在规定时间段内为静态的页,则可以将整个页设置为静态缓存。如果向页添加一个显示用户名的Label控件,则对于每次页刷新和每个用户而言,Label的内容都将保持不变,始终显示缓存该页之前请求该页的用户的姓名。使用缓存后替换机制,可以将页配置为静态缓存,将页的个别部分标记为不可缓存。在此情况下,可以向不可缓存部分添加Label控件,这样将为每个用户和每次页请求动态创建这些控件。
- 应用程序缓存
应用程序缓存提供了一种编程方式,可通过键/值对将任意数据存储在内存中。使用应用程序数据缓存与使用应用程序状态类似。但是,与应用程序状态不同的是,应用程序数据缓存中的数据是易失的,即数据并不是在整个应用程序生命周期中都存储在内存中。应用程序数据缓存的优点是由ASP.NET管理缓存,它会在项过期、无效或内存不足时移除缓存中的项,还可以配置应用程序缓存,以便在移除项时通知应用程序。
2.缓存依赖
ASP.NET新增了SQL数据缓存依赖功能。该功能的核心是SqlCacheDependency类。不同版本的SQL Server,其对于SQL数据缓存依赖具有不同程度的支持,因此,使用方法差异较大。另外,ASP.NET 4.5还支持以CacheDependency类为核心的自定义缓存依赖,以及以AggregateCacheDependency类为核心的聚合缓存依赖等。