缓存依赖
缓存依赖主要由3个核心类来实现:CacheDependency、AggregateCacheDependency、SqlCacheDependency。CacheDependency类是AggregateCacheDependency类和SqlCacheDependency类的父类。
CacheDependency 类
在存储于 ASP.NET 应用程序的 Cache 对象中的项与文件、缓存键、文件或缓存键的数组或另一个 CacheDependency 对象之间建立依附性关系。CacheDependency 类监视依附性关系,以便在任何这些对象更改时,该缓存项都会自动移除。例如,假设您基于 XML 文件中的数据创建一个 DataSet 对象。可以利用使 DataSet 依赖于 XML 文件的 CacheDependency 对象将该 DataSet 添加到缓存中。如果该 XML 文件发生更改,则 DataSet 从缓存中移除。可以用 Add 和 System.Web.Caching.Cache.Insert 方法向应用程序缓存中添加具有依赖项的项。
CacheDependency类用于实现自定义缓存依赖,它有9个构造函数,2个属性,6个方法,具体参考MSDN。
AggregateCacheDependency类
组合 ASP.NET 应用程序的 Cache 对象中存储的项和 CacheDependency 对象的数组之间的多个依赖项。无法继承此类。
备注:AggregateCacheDependency 类监视依赖项对象的集合,以便在任何依赖项对象更改时,该缓存项都会自动移除。数组中的对象可以是 CacheDependency 对象、SqlCacheDependency 对象、从 CacheDependency 派生的自定义对象或这些对象的任意组合。AggregateCacheDependency 类与 CacheDependency 类的不同之处在于前者允许您将不同类型的多个依赖项与单个缓存项关联。例如,如果您创建一个从 SQL Server 数据库表和 XML 文件导入数据的页,则可创建一个 SqlCacheDependency 对象来表示数据库表的依赖项,以及一个 CacheDependency 来表示 XML 文件的依赖项。可创建 AggregateCacheDependency 类的一个实例,将每个依赖项添加到该类中,而不是为每个依赖项调用 Cache.Insert 方法。然后,可使用单个 Insert 调用使该页依赖于AggregateCacheDependency 实例。
SqlCacheDependency类
在以下两者之间建立关系:一是在 ASP.NET 应用程序的 Cache 对象中存储的项;二是特定 SQL Server 数据库表或 SQL Server 2005 查询的结果。无法继承此类。
备注:SqlCacheDependency 类在所有受支持的 SQL Server 版本 (7.0, 2000, 2005) 上监视特定的 SQL Server 数据库表,以便在该表发生更改时,自动从 Cache 中删除与该表关联的项。
数据库表发生更改时,将自动删除缓存项,并向 Cache 中添加新版本的项。
在使用 SQL Server 2005 数据库时,SqlCacheDependency 类还支持与 System.Data.SqlClient.SqlDependency 类进行集成。使用 SQL Server 2005 的查询通知机制来检测使 SQL 查询结果无效的数据更改。与 SQL 查询关联的任何缓存项都将从 System.Web.Caching.Cache 中移除。
在使用 SQL Server 2005 时,可以使用 SqlCacheDependency 类向应用程序的 Cache 添加依赖于 SQL Server 数据库表或 SQL 查询的项。还可以将此类与 @ OutputCache 指令一起使用,以生成依赖于 SQL Server 数据库表的输出缓存的页或用户控件。最后,在使用 SQL Server 2005 时,可以将 SqlCacheDependency 类与 @ OutputCache 页指令一起使用,以生成依赖于 SQL 查询结果的输出缓存的页。对于用户控件,@ OutputCache 指令不支持使用 SQL Server 2005 的查询通知。
注意:为使此类在使用基于表的通知时正常工作,必须为数据库及要设置依赖项的任何表启用通知。可通过使用 SqlCacheDependencyAdmin 类的方法或 Aspnet_regsql.exe 命令行工具启用通知。同时,应用程序的 Web.config 文件中必须包含正确的配置设置。将 SqlCacheDependency 对象与 SQL Server 2005 查询通知一起使用不需要任何显式配置。开发人员应参考 SQL Server 2005 联机丛书,以了解使用查询通知时允许的 Transact-SQL 查询类型的限制。
下面是一个 ASP.NET Web.config 文件示例,该文件对 SQL Server 数据库表启用了基于表的依赖项。