请教sql 2005的缓存依赖机制 大家好,请教下sql 2000 与sql 2005缓存依赖的机制区别问题。查资料说是 sql 2000 是依赖于表,而 sql 2005 可以精确到行,这里就涉及到一个问题,比如说有一个新闻表,里面有十行记录,我如果将整张表缓存起来,其中一行记录发行变化,缓存将失效。但是我如果将十个记录分开来缓存,有一行记录发生变化的时候,sql 2000会将十个缓存失效,而 2005 只失效一条,是这样的吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ----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 求教,有么有更高效的写法 在线求一条查询最大时间的SQL语句 SQL2000表里的数据被删除了,没查到原因 Help:这个问题怎么解决?马上给分 SQL Server不能安装了,急急急!! 怎樣執行存儲過程(帶參數的)? 可以調試存儲過程嗎? 急! 急! 哪位高手能解决啊?地址:http://61.185.235.98/work/traffic/zwgg/index.asp 如何获取sql server中一条update语句影响的记录数? 在where条件语句中使用条件查询 小白学习SQL 收缩 对于 数据库 xx 失败!高手来吧 关于SQL Server数据库 top关键字分页查询问题
实现机制
轮询
通知传递服务(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