NHibernate 二级缓存不缓存查询缓存的结果
NHibernate Second Level Cache not caching results from Query Cache
在我们的应用程序配置中,我们已将 NHibernate 配置为使用 SysCacheProvider 启用的二级缓存和查询缓存,配置流畅...
.Cache(x => x.UseQueryCache().ProviderClass<SysCacheProvider>().UseSecondLevelCache())
我们有一个名为 Lookup
的实体,在其映射文件中标有 Cache.ReadOnly()
,我们使用 CreateCriteria
和 SetCacheable(true).SetCacheMode(CacheMode.Normal)
.[=16= 来获取它]
问题是二级缓存好像没有用到。使用 NHProf,我们可以看到第一个获取 Lookup 的查询(通过唯一的字符串 ID)被正确缓存,但是在每次调用时 NHibernate 然后去数据库通过缓存的 sql ID 获取行,而不是比使用二级缓存。
我什么都做了in this blog,但无济于事。
还有什么我需要做的吗,或者是否有任何陷阱可能意味着实体不会被添加到二级缓存中?
您在使用交易吗?
如果答案是否定的,放弃二级缓存,或者开始使用事务。为了确保它仅缓存有效数据,如果在不使用事务的情况下修改数据,缓存类型会自行禁用。
这是一个常见的陷阱,试图在不使用事务的情况下使用缓存,如here. This confirms it too. Another reason could be this one,比较棘手。
当我们从 NServiceBus 处理程序中使用 NHibernate 时,缓存失败。事实证明,在 NSB 处理程序中,我们使用的版本 the second level cache is not supported(版本 5.x)。
在我们的应用程序配置中,我们已将 NHibernate 配置为使用 SysCacheProvider 启用的二级缓存和查询缓存,配置流畅...
.Cache(x => x.UseQueryCache().ProviderClass<SysCacheProvider>().UseSecondLevelCache())
我们有一个名为 Lookup
的实体,在其映射文件中标有 Cache.ReadOnly()
,我们使用 CreateCriteria
和 SetCacheable(true).SetCacheMode(CacheMode.Normal)
.[=16= 来获取它]
问题是二级缓存好像没有用到。使用 NHProf,我们可以看到第一个获取 Lookup 的查询(通过唯一的字符串 ID)被正确缓存,但是在每次调用时 NHibernate 然后去数据库通过缓存的 sql ID 获取行,而不是比使用二级缓存。
我什么都做了in this blog,但无济于事。
还有什么我需要做的吗,或者是否有任何陷阱可能意味着实体不会被添加到二级缓存中?
您在使用交易吗?
如果答案是否定的,放弃二级缓存,或者开始使用事务。为了确保它仅缓存有效数据,如果在不使用事务的情况下修改数据,缓存类型会自行禁用。
这是一个常见的陷阱,试图在不使用事务的情况下使用缓存,如here. This confirms it too. Another reason could be this one,比较棘手。
当我们从 NServiceBus 处理程序中使用 NHibernate 时,缓存失败。事实证明,在 NSB 处理程序中,我们使用的版本 the second level cache is not supported(版本 5.x)。