大家好,请教下sql 2000 与sql 2005缓存依赖的机制区别问题。查资料说是 sql 2000 是依赖于表,而 sql 2005 可以精确到行,这里就涉及到一个问题,比如说有一个新闻表,里面有十行记录,我如果将整张表缓存起来,其中一行记录发行变化,缓存将失效。但是我如果将十个记录分开来缓存,有一行记录发生变化的时候,sql 2000会将十个缓存失效,而 2005 只失效一条,是这样的吗?

解决方案 »

  1.   

    ----SQL SERVER 2000与SQL SERVER 2005缓存依赖的机制区别
     
    实现机制
     轮询
     通知传递服务(Service Broker)
     
    是否需要配置启用
     需要
     不需要,内置支持
     
    数据更改检测
     限于表级更改监测
     表级、行级更改监测
     
    并且很明显,SQL SERVER 2005的缓存机制更加高效。另外,SqlCacheDependency类还特别结合SQL SERVER 2005 进行了优化:
    a).     使用SQL SERVER 2005 时,SqlCacheDependency类支持与System.Data.SqlClient.SqlDependency类进行集成。应用程序可创建SqlDependency对象,并通过OnChanged事件处理程序接受通知进行注册。这样,应用程序不仅可以使用Sql server 2005的查询通知机制来监测使用SQL查询结果无效的数据更改,并将缓存对象从缓存中移除,而且还可以轻松获取数据更改通知,以便刷新缓存。(从这里可以看出,当触发onRemoveCallback委托的时候,数据已经从缓存里面删除了,这样一来可以手动在委托里面添加缓存,或者干脆设置成null,让他下次调用的时候再缓存。)
     b).     不仅向应用程序添加缓存依赖项,还可以与@OutputCache指令一起使用,以生成依赖于SqlServer数据库表的输出缓存的页面或用户控件。对于用户控件,@OutputCache指令不支持使用SQL SERVER 2005 的查询通知(即onRemoveCallback委托)。 二、System.Web.Caching.Cache  Insert和Add区
    2.1     Add方法   bject Add(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback); 2.2     Insert方法    void Insert(string key, object value);                    void Insert(string key, object value, CacheDependency dependencies);                    void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration);                    void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemUpdateCallback onUpdateCallback);                    void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback); 2.3     比较、区别               a).     Insert方法支持5种重载,使用灵活,而Add方法必须提供7个参数;               b).     Add方法可以返回缓存项的数据对象,Insert 返回Void;               c).     添加重复缓存情况下,Insert会替换该项,而Add方法会报错。三、     CacheDependency、AggregateCacheDependency、SqlCacheDependency          3.1     CacheDependency是AggregateCacheDependency和SqlCacheDependency的父类。主要用于在应用程序数据缓存对象与文件、缓存键、文件或缓存键的数组或另外一个CacheDependency对象之间建立依赖关系。CacheDependency监视依赖关系比便在任何对象更改时自动移除缓存对象。CacheDependency可以监测一组(到文件或目录的)文件路径的更改情况。          3.2     AggregateCacheDependency主要用于实现聚合缓存依赖。如一笔数据同时对两个表进行缓存依赖,一旦其中任何一个表数据更改缓存将失效。          3.3     SqlCacheDependency将应用程序数据缓存对象、页面输出缓存、数据源控件等与指定SQL Server数据库表或Sql Server 2005 查询结果之间建立缓存依赖关系,在表发生更改(Sql Server 2005 行级别更改)时,自动从缓存中删除和重新添加与该表关联的缓存对象。一般而言:                    SqlCacheDependency (SqlCommand)      用于SQL SERVER 2005                    SqlCacheDependency (数据库名, 表名)      用于SQL SERVER 2000