问题标签 [second-level-cache]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
nhibernate - NHibernate 2.1.1.4000 的 NHibernate 二级缓存提供程序
我正在使用针对 NHibernate 2.1.1.4000 构建的 s#arp,但是我想使用 NHibernate.Caches.SysCache 作为我的二级缓存。然而,Nhibernate contrib 缓存是针对 NHibernate 2.1.2.4000 构建的,这显然给了我一个问题。
谁能指出我可以下载针对 NHibernate 2.1.1.4000 构建的 NHibernate.Caches.SysCache.dll 的 URL
或者是否有另一个易于实现并且针对 NHibernate 2.1.1.4000 构建的二级缓存提供程序
谢谢
asp.net-mvc - 在 NHibernate 二级缓存之上使用 ASP.NET 缓存
我是否应该考虑使用 ASP.NET 缓存在 NHibernate 2 级缓存之上缓存查询结果以提高性能?
hibernate - 如何知道/记录 Hibernate 2 级缓存是否用于查询?
目前,为了检查 Hibernate 二级缓存是否用于数据库查询,我检查了我的 SQL 日志(通过 Datasource.groovy 中的 p6spy 或 logSql=true)以查看 Grais/Hibernate 是否触发了 SQL 查询。而且我假设如果没有记录查询,则可能意味着使用了缓存。
一个简单的信息是相当复杂的,不是吗?
那么您是否知道获取和记录信息的简单方法:“使用缓存与触发数据库查询”?
编辑:按照 Pascal 的建议,我已将此添加trace 'org.hibernate.cache'
到我的 log4j 配置中。
nhibernate - NHibernate 缓存困境
我的应用程序包括客户端、Web 层(负载平衡)、应用程序层(负载平衡)和数据库层。Web 层向客户端公开服务,并将调用转发到应用程序层。然后应用层对数据库执行查询(使用 NHibernate)并返回结果。
数据主要是读取,但写入却相当频繁,尤其是当新数据进入系统时。通常情况下,数据是聚合的,这些聚合返回给客户端 - 而不是原始数据。
通常,用户会对最近数据的聚合感兴趣——比如过去一周的数据。因此,对我来说,引入一个包含过去 7 天所有数据的缓存是有意义的。我不能只在加载实体时缓存它们,因为我需要聚合一系列实体,并且该范围由客户端以及其他复杂情况(例如过滤器)决定。我需要知道 - 在给定的时间范围内 - 该范围内的所有数据是否都在缓存中。
在我理想的幻想世界中,我的服务根本不需要改变:
将有一个单独的过滤层连接到 NHibernate 中,并智能且透明地确定 HQL/条件查询是否可以针对缓存执行,并且仅在必要时才进入数据库。如果所有数据都在缓存中,它会查询缓存数据本身,有点像内存数据库。
然而,在第一次检查中,NHibernate 的二级缓存机制似乎并不适合我的需要。我想做的是:
- 将其配置为始终在缓存中保留最近 7 天的数据。例如。“对于这个表,缓存该字段在 7 天前和现在之间的所有记录。”
- 具有手动维护缓存的能力。当新数据进入系统时,如果我可以直接将其放入缓存而不是等到缓存失效,那就太好了。同样,当数据超出时间段时,我希望能够从缓存中提取它。
- 让 NHibernate 智能地了解它何时可以直接从缓存中提供查询,而不是完全访问数据库。例如。如果用户请求过去 3 天的数据聚合,则该聚合应直接从缓存中计算,而不是接触数据库。
现在,我很确定#3 要求太多了。即使我可以在缓存中填充所需的所有数据,NHibernate 也不知道如何有效地查询这些数据。它实际上必须遍历所有实体以区分哪些与查询相关(老实说,这可能很好)。此外,它还需要实现 NHibernate 的查询引擎,该引擎针对对象而不是数据库执行。但我可以做梦,对吧?
假设 #3 要求太多,我需要在我的服务中使用一些逻辑,如下所示:
这并不理想,因为每个服务都必须是缓存感知的,并且必须复制聚合逻辑:一次用于通过 NHibernate 查询数据库,一次用于查询缓存。
也就是说,如果我至少可以将相关数据存储在 NHibernate 的二级缓存中,那就太好了。这样做将允许其他服务(不进行聚合)透明地从缓存中受益。如果我决定在系统的其他地方需要二级缓存,它还将确保我不会在缓存的实体上加倍(一次在二级缓存中,一次在我自己的单独缓存中)。
我怀疑如果我可以ICache
在运行时获得实现,我需要做的就是调用该Put()
方法将我的数据粘贴到缓存中。但这可能是在危险的地方...
谁能提供关于 NHibernate 的二级缓存机制是否可以满足我的任何要求的任何见解?还是我应该推出自己的解决方案并完全放弃 NHibernate 的二级缓存?
谢谢
PS。我已经考虑过使用多维数据集更快地进行聚合计算,但这仍然让我将数据库作为瓶颈。除了缓存之外,我还可以使用多维数据集,但缺少缓存是我现在最关心的问题。
wcf - 为 nHibernate 选择哪个二级缓存?
我有一个使用 WCF 创建的数据服务,它在内部使用 nHibernate。此 WCF 数据服务由使用 Tcp 通道部署在 Web 服务器上的 Asp.Net 应用程序使用。
为了提高 nHibernate 数据服务的性能,我想实现 nHibernate 二级缓存。在这个场景中哪个二级缓存提供者会很好?由于 SysCache 使用 Asp.net 缓存,我可能无法在 WCF 服务中使用它?
上述 WCF 数据服务可以在不同的服务器上有多个实例,以提高应用程序的可扩展性。
performance - 值得从 NHibernate 1.2 迁移到 NHibernate 2.x 吗?
我们在性能不佳的系统中使用 nHibernate 1.2。如果我们迁移到最新版本的 nHibernate,性能会有一些提升吗?
总的来说,迁移到最新版本的 nHibernate 是个好主意吗?
编辑:我想使用以下功能来提高性能。
1.二级缓存。2. 连接表。3. MultiQuery 到批量查询。
nhibernate - NHibernate 2nd lvl 缓存,自定义查询,sqldialect
我有 NH 和 FNH 的主干版本。当我尝试添加二级缓存时,NHibernate 的某些部分忘记了选择的 sqldialect。
初始配置:
有罪自定义查询:
当我将配置更改为:
查询抛出错误(WITH
在mssql2008中添加了子句):
查询应以“SELECT”或“SELECT DISTINCT”开头
[NotSupportedException: 查询应该以 'SELECT' 或 'SELECT DISTINCT' 开头] NHibernate.Dialect.MsSql2000Dialect.GetAfterSelectInsertPoint(SqlString sql) +179 NHibernate.Dialect.MsSql2000Dialect.GetLimitString(SqlString querySqlString, Int32 offset, Int32 limit) +119 NHibernate .Dialect.MsSql2005Dialect.GetLimitString(SqlString querySqlString, Int32 offset, Int32 last) +127 NHibernate.Loader.Loader.PrepareQueryCommand(QueryParameters queryParameters, Boolean scroll, ISessionImplementor session) +725 NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters , Boolean returnProxies) +352 NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) +114 NHibernate.Loader。Loader.DoList(ISessionImplementor session, QueryParameters queryParameters) +205
任何想法究竟是什么混淆了 nhibernate 以及如何解决它?
有罪的 NHibernate 代码(在 NHibernate/Dialect/MsSql200Dialect.cs 中):
看起来是.SetMaxResults(123)
导致这个的。幸运的是,我可以取消绑定该查询。
希望这能解决这个问题。
nhibernate - 如何清除NHibernate中的整个二级缓存
我希望通过代码清除 NHibernate 中的整个二级缓存。有没有一种独立于所使用的缓存提供程序的方法?(我们有客户在同一个应用程序中同时使用 memcache 和 syscache)。
我们希望清除整个缓存,因为可能发生了数据库外部的更改(并且我们无法保证:哪些表/实体受到影响,因此我们必须假设最坏的情况)。
asp.net-mvc - 依赖 nhibernate 的二级缓存 vs 将对象推送到 asp.net 会话中
我有一些在同一个会话中经常访问的大实体。例如,在我的应用程序中有一个由动态生成的图表图像组成的报告页面。对于此页面上的每个图表图像,客户端向相应的控制器发出请求,控制器使用一些实体生成图像。我可以使用 asp.net 的会话字典来“缓存”这些实体,或者依赖 nhibernate 的二级缓存支持,例如使用缓存查询。
你有什么意见?
顺便说一句,我将使用共享主机,nhibernate 的二级缓存主机友好吗?
谢谢。
java - 默认情况下,实体是否缓存在 jpa 中?
我将实体添加到我的数据库中,它工作正常。但是当我检索列表时,我得到了旧实体,我添加的新实体在我取消部署应用程序并再次重新部署之前不会显示。这意味着我的实体是否默认缓存?但是,我没有对我的 persistence.xml 或任何此类文件中的缓存实体进行任何设置。
我什至尝试调用flush()、refresh() 和merge()。但它仍然只显示旧实体。我错过了什么吗?请帮我。