SqlCacheDependency是否使用轮询或查询通知?

时间:2014-06-16 06:01:02

标签: asp.net caching sqldependency

我的需求是在Key值表之上构建一个简单的配置框架。由于这是经常使用的并且很少更改,因此更愿意缓存表值。一个要求是如果在DB中更改了值,它应立即反映在App中。所以,我计划实施SqlCacheDependency。 Doc说

  

SQL Server 2005的查询通知机制检测到更改   数据使SQL查询的结果无效并删除任何   缓存与SQL查询关联的项目   的System.Web.Caching.Cache

从示例中我注意到配置中有一个名为PollTime的属性。 Doc说

  

获取或设置SqlCacheDependency轮询的频率   数据库表进行更改。

我对这是否使用查询通知技术或使用轮询机制感到困惑。

我的堆栈是.NET 4.0和SQL Server 2008 R2。

1 个答案:

答案 0 :(得分:4)

从SqlServer 2005开始(因此适用于sqlserver 2008R2),Sql Cache Dependency通过使用查询更改通知机制来工作。它们使用内置于数据库中的通知基础结构和消息传递系统,称为Service Broker

Sql server 2000及更早版本采用了轮询机制。

您可能对以下建议的进一步阅读感兴趣::

Jess Liberty ,书籍作者: asp.net编程(Oreilly Media)说:

不需要使用aspnet_regsql.exe配置数据库,如果您使用带有查询通知机制的sqlserver 2005或更高版本,则无需在<sqlCacheDependency>中添加web.config元素。

MSDN还说::当<sqlCacheDependency>元素与SQL Server 2005上的查询通知一起使用时,此配置设置即sqlCacheDependency无效。这样做表示使用查询通知时设置pollTime无效。