NHibernate查询缓存的过期

4

NHibernate的查询缓存是否可以配置过期时间?

对于二级缓存,可以在nhibernate.cfg.xml中进行设置,但我找不到设置SQL查询缓存的方法。

编辑:

ICriteria query = CreateCriteria()
                  .Add(Expression.Eq("Email", identifiant))
                  .SetCacheable(true)
                  .SetCacheRegion("X");



 <syscache>
    <cache region="X" expiration="10" priority="1" />
  </syscache>

Francois,因为你的设置看起来没问题,所以我在nhibernate.cfg.xml配置文件中增加了一项重要的设置。也许这就是缺失的部分。 - Radim Köhler
1个回答

6

是的,我们可以通过区域设置缓存过期时间。将查询调整为如下所示:

criteria.SetCacheable(true)
    .SetCacheMode(CacheMode.Normal)
    .SetCacheRegion("LongTerm");

将类似的配置放入web.config文件中

<configSections>
    <section name="syscache" type="NHibernate.Caches.SysCache.SysCacheSectionHandler, NHibernate.Caches.SysCache" requirePermission="false" />
</configSections>
<syscache>
    <cache region="LongTerm" expiration="180" priority="5" />
    <cache region="ShortTerm" expiration="60" priority="3" />
</syscache>

编辑: 我只是添加了这个链接通过criteria获取实体时未使用class-cache,以确保我所说的SQL查询缓存。在链接的答案中,我解释了这个主题。

仅仅为了澄清。NHibernate的“session-factory”的配置必须包含:

<property name="cache.use_query_cache">true</property>

这个开关将使查询缓存起作用。更多细节请参考:http://nhibernate.info/doc/nh/zh-cn/index.html#performance-querycache


这个问题明确不涉及二级缓存。 - Oskar Berggren
术语SQL查询缓存是什么意思?有一个名为cache的类,其在配置文件中声明为:<property name="cache.use_second_level_cache">true</property>。查询缓存是:<property name="cache.use_query_cache">true</property>。我的答案与此相关。查询的缓存(缓存的条件结果-查询缓存) - Radim Köhler
是的,我是指查询缓存。我对类似于第二级缓存定义的缓存区进行了一些测试,但没有效果(并且我没有投反对票)。 - Francois
过期时间对我来说是有效的。但是futures可能会有一些警告吗?那么,“一个”future中的所有查询必须具有相同的区域!否则它们不会被缓存。(负投票现在不存在) - Radim Köhler
是的,这正是我正在使用的。那么,您是说在10秒钟后,您无法在SQL分析器中看到查询,对吗?还是缓存根本不起作用?因为您下面EDIT子句中的设置与我的类似。 - Radim Köhler
我在SQL分析器中没有看到它。今天早上我完全重建了解决方案,现在看起来没问题了。我创建了一个测试页面,每100毫秒调用一次存储库,共调用500次,并将过期时间设置为10秒,我看到了5个查询。感谢您的时间。 - Francois

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接