【问题标题】:NHibernate Second Level Cache not caching results from Query CacheNHibernate 二级缓存不缓存来自查询缓存的结果
【发布时间】:2017-08-17 15:53:10
【问题描述】:

在我们的应用程序配置中,我们已将 NHibernate 配置为使用 SysCacheProvider 启用的二级缓存和查询缓存,配置流畅...

.Cache(x => x.UseQueryCache().ProviderClass<SysCacheProvider>().UseSecondLevelCache())

我们有一个名为Lookup 的实体,在其映射文件中用Cache.ReadOnly() 标记,我们使用CreateCriteriaSetCacheable(true).SetCacheMode(CacheMode.Normal) 获取它。

问题是二级缓存似乎没有使用。使用NHProf,我们可以看到获取查找的第一个查询(通过唯一的字符串ID)被正确缓存,但是在每次调用时NHibernate然后通过缓存的sql ID进入数据库以获取行,而不是使用第二个一级缓存。

我已经做了所有in this blog 但无济于事。

我还有什么需要做的吗,或者是否有任何陷阱可能意味着实体不会被添加到二级缓存中?

【问题讨论】:

    标签: caching nhibernate fluent-nhibernate second-level-cache


    【解决方案1】:

    当我们在 NServiceBus 处理程序中使用 NHibernate 时,缓存失败。事实证明,在 NSB 处理程序中,the second level cache is not supported 是我们正在使用的版本(版本 5.x)。

    【讨论】:

      【解决方案2】:

      你在使用交易吗?

      如果答案是否定的,放弃二级缓存,或者开始使用事务。为了确保它只缓存有效数据,如果数据被修改而不使用事务,缓存类型会自行禁用。

      这是一个常见的陷阱,试图使用缓存而不使用事务,如hereThis 也证实了这一点。另一个原因可能是这个one,比较棘手。

      【讨论】:

      • 这不是我们的问题,但需要牢记,所以我将其标记为正确。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-02
      • 1970-01-01
      • 2014-11-28
      • 2011-12-18
      • 2014-06-20
      • 1970-01-01
      • 2014-06-28
      相关资源
      最近更新 更多