我已经将我的SQL Server2008上的enable_broker设置为使用SQLDepndency
我已经将我的.Net应用程序配置为使用带有缓存区域的Syscache2,如下所示:
<syscache2>
<cacheRegion name="BlogEntriesCacheRegion" priority="High">
<dependencies>
<commands>
<add name="BlogEntries"
command="Select EntryId from dbo.Blog_Entries where ENABLED=1"
/>
</commands>
</dependencies>
</cacheRegion>
</syscache2>我的Hbm文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="BlogEntry" table="Blog_Entries">
<cache usage="nonstrict-read-write" region="BlogEntriesCacheRegion"/>
....
</class>
</hibernate-mapping>我还为针对BlogEntry的查询启用了查询缓存
当我第一次查询时,结果被缓存在二级缓存中,正如预期的那样。
如果我现在去更改blog_entries中的一行,一切都按预期工作,缓存已过期,则会收到以下消息:
2010-03-03 12:56:50,583 [7] DEBUG NHibernate.Caches.SysCache2.SysCacheRegion - Cache items for region 'BlogEntriesCacheRegion' have been removed from the cache for the following reason : DependencyChanged我早就料到了。在下一个页面请求中,查询及其结果被存储回缓存中。但是,即使没有进一步更改,缓存也会立即再次失效。
DEBUG NHibernate.Caches.SysCache2.SysCacheRegion - Cache items for region 'BlogEntriesCacheRegion' have been removed from the cache for the following reason : DependencyChanged我的缓存每次都会不断失效,底层数据不会发生任何变化。只有重启应用程序才允许缓存再次运行-但仅在第一次缓存数据时(同样,第一次弄脏缓存会导致缓存再也无法工作)
有没有人看到这个问题,或者知道这可能是什么?我在想,syscache2需要处理SQLDependency onChange事件,它可能正在处理-所以我不明白为什么SQL Server一直发送SQLDependency depedencyChanged。
谢谢
发布于 2010-03-29 23:14:00
我们在一个数据库实例上遇到了同样的问题,但在另一个数据库实例上却没有。这显然是数据库端的某种权限问题,因为在这两种情况下都使用完全相同的NHibernate配置。
在工作情况下,缓存的行为与预期一样,在另一个情况下(这是一个具有更严格权限的数据库引擎),我们得到了与您提到的完全相同的行为。
https://stackoverflow.com/questions/2375119
复制相似问题