问题标签 [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.

0 投票
1 回答
3119 浏览

hibernate - 休眠的二级缓存对象是lazy=false,导致默认的fetch=join,它是否记录在任何地方?

我遇到了以下明显未记录的问题,我想了解是否

  1. 我做错事情了
  2. 有没有人遇到同样的问题?
  3. 它真的没有任何地方记录吗?还是我错过了什么?

行为是这样假设以下映射

首先,作为背景,多对一关系上fetch属性的 Hibernate 默认值应该是“ select ”,这至少是记录的内容(我会在找到它时在此处添加链接)

但是,这显然只有在引用的类是 lazy="true" 时才成立!

所以显然上面的映射被翻译成这个(因为 Bar 是lazy="false"):

现在为什么这会是一个问题?而不是 2 个选择,Hibernate 将使用其“父项”在单个选择中加载非惰性引用(在单个选择中使用 Bar 加载 Foo)

这实际上是有道理的,既然对象不是惰性的,为什么不加载它呢?

答案是这样的:如果 Bar 在二级缓存中会发生什么?

答案是——没有任何改变!

显然,人们会假设 Hibernate 足够聪明,可以理解不应加载这种类型的对象,但由于默认提取已从 select 更改为 join,Hibernate 没有选择(您不能使用二级缓存,但)

所以 Hibernate 做它被告知的事情,并使用一个连接从数据库中获取一个对象,它已经在 2 级缓存中

我找到的解决方案是从字面上将映射更改为 fetch="select"

现在,当 Bar 的第二次选择即将进行时,Hibernate 知道它不应该进入数据库,并从缓存中获取它。并且只会执行 1 个查询(预热后)

0 投票
3 回答
6644 浏览

hibernate - 休眠查询缓存 - 对于不在二级缓存中的对象 - 有风险吗?有用?不好的做法?

与这个问题有关

前提:

这些是我的假设,基于我的阅读、经验和理解,它们可能是错误的,如果是,请发表评论,我将编辑问题。

  • 查询缓存主要与二级缓存一起使用
  • 查询缓存缓存查询+参数的标识符结果
  • 如果数据库被更改并且它没有反映到缓存中,查询缓存是有风险的

问题:

我有一个不在二级缓存中的对象。由于一些糟糕的编程或其他限制,加载对象的代码在同一个休眠会话中被多次调用。检索使用 HQL 查找查询,例如

在添加查询缓存之前,如果上面的代码在同一个Hibernate Session中被调用N次,那么数据库有N次命中

然后我想看看如果我添加查询缓存会发生什么:

当我添加查询缓存时,我注意到在同一个会话期间,休眠不再访问数据库 N 次,每个会话只有一次。

  1. 所以我的第一个假设是 Hibernate 首先在 Session Cache 中搜索,然后在 2nd Level Cache 中搜索。这个假设正确吗?
  2. 我还假设如果Foo不在二级缓存中的对象 () 在数据库中被更改,那么跨会话范围的查询缓存将返回错误的标识符,从而返回错误的对象。那是对的吗?
  3. 是否可以肯定地说,即使对于非 2L 缓存对象,对包含不可变信息的查询使用查询缓存是一种好习惯?(例如一个查询,它的 where 子句包含一个总是返回相同结果的条件,例如“select p.ser_num where p.id = ?” 当 ser_num 和 id 对一旦创建就不会改变)

顺便说一句,在相关问题中声称查询缓存不适用于会话缓存范围。我是否误解了该声明或其他任何内容?

0 投票
1 回答
978 浏览

hibernate - 运行 JPQL 更新语句时,Hibernate 2 级缓存是否失效

当您运行 JPQL 更新或删除查询时,Hibernate 是否足够智能以使更改的实体的二级缓存无效?

人为的例子:

你有 JPQL:

如果在运行该语句时您当前在二级缓存中有产品,Hibernate 是否会使缓存中的所有产品无效,或者它对缓存没有任何作用,并且二级缓存中的产品现在无效?

仅供参考...我正在使用带有 Hibernate 和 JBossCache 的 JBoss 5.1

0 投票
1 回答
352 浏览

c - CPU-Core线程分类功能

我将编写一个多线程共享内存消息传递系统,用于进程之间的超大容量消息传递。消息将来自网络服务器的工作线程。我想利用同一 CPU 共享上的内核的 CPU 缓存位置。因此,当我在这个 IPC 系统的接收端唤醒一个工作线程时,我会唤醒同一个 CPU 上的一个线程。

我需要Linux(最好是一般的POSIX)和windows API调用和我需要做的位掩码来提取信息,这些信息将让我使用以下结构从所述线程的上下文中对正在执行的线程ID进行分类:

两个平台的功能将不胜感激。我希望这可以在没有系统调用的情况下完成——即上下文切换。

- 编辑 -

我目前专注于 x86,但其他架构也会很有用。

0 投票
1 回答
1912 浏览

java - SwarmCache 休眠配置

谁能提示我如何为 Hibernate 配置 SwarmCache 以在集群中工作(分布式缓存)?可能还有其他选择(请不要建议 JBoss Cache)?

0 投票
1 回答
892 浏览

hibernate - Hibernate - 查询缓存/二级缓存不适用于包含子项的值对象

我一直在努力解决以下问题:
我有一个包含不同面板的值对象。每个面板都有一个字段列表。

映射:

我使用以下标准来获取值对象:

正如我所见,查询缓存仅包含主要选择,例如

RACountryPanels 和 RAFieldVO 都是二级缓存。如果我检查二级缓存内容,我可以看到它也包含 RAFields 和 RACountryPanels,并且我可以在查询缓存区域中看到 select .. from CTRY where ctry_cd_id=... 。

当我调用 servlet 时,它似乎正在使用缓存,但第二次没有。 如果我使用 JMX 检查缓存的内容,似乎一切正常,但是当我测量对象访问时间时,它似乎并不总是使用缓存。

干杯佐尔坦

0 投票
2 回答
1012 浏览

asp.net - NHibernate + ASP.NET + 在视图中打开会话 + L2Cache

我正在使用众所周知的 CodeProjectOpen Session in View来处理 NHibernate 会话。它适用于Level 2 Cache吗?有人成功做到了吗?我应该NH.Burrow改用吗?任何关于 asp.net 最佳实践中的 l2 缓存的建议都值得赞赏。

编辑:链接到 CodeProject 的文章: http: //www.codeproject.com/KB/architecture/NHibernateBestPractices.aspx

0 投票
2 回答
2572 浏览

hibernate - 如何在 Grails 中临时禁用只读二级缓存休眠策略?

在我的 grails 应用程序中,我的某些域类永远不会被用户更改。

但是,有时需要进行一些维护工作,并且管理员应该能够不时创建/编辑一些实例(假设一年两次)。

我想为这些域类()设置一个只读的二级缓存策略,static mapping = { cache usage: 'read-only' }并且我希望能够“禁用”(在非常特殊的情况下)只读策略,以便通过 Grails 脚手架更新某些实例编辑视图。

是否可以?你建议我怎么做?

编辑:我正在实施的解决方案是 Pascal 和 Burt 答案的混合(见评论)。这两个答案都很棒而且很有帮助。所以我在选择接受的答案时遇到了难题!无论如何,谢谢你。

0 投票
3 回答
860 浏览

asp.net-mvc - 关于大流量网站缓存的问题

假设我们正在构建一个电子商务网站,允许消费者通过输入关键字来搜索产品。假设最多有 200,000 种产品,并且有数百万消费者在使用该系统。假设产品表更新得相当频繁。由于产品的数量并不多,我们可能可以将整个产品表存储在内存中并对其进行搜索而不是访问数据库。我们希望创建存储相同数据但驻留在不同服务器中的分布式缓存(出于高可用性和性能原因),并且我们需要能够在这些缓存之间同步数据并在修改产品表时使缓存无效。

我们的应用程序是使用 ASP.NET MVC 和 NHibernate 构建的。我试图了解 NHibernate 的 2 级缓存是否对我的情况有所帮助。如果你们能对此有所了解,我将不胜感激。

我知道二级缓存将有助于缓存查询结果,因此如果两个不同的用户使用相同的关键字进行搜索,则二级缓存将提供来自缓存而不是数据库的结果。但这对我们没有多大帮助,因为产品表经常更新并且缓存的结果会过时。我的问题是我是否正确理解 L2 缓存,是否有任何东西可以帮助我按照我想要的方式管理缓存(多个缓存、相同的数据、缓存之间的同步和无效缓存)。任何想法都受到高度赞赏。

0 投票
1 回答
9078 浏览

java - 如何在 Hibernate 中为延迟加​​载的集合使用二级缓存?

假设我有两个实体,Employee并且Skill. 每个员工都有一套技能。现在,当我通过实例懒惰地加载技能时Employee,缓存不用于不同实例中的技能Employee

让我们考虑以下数据集。

当我在 Employee - 1 之后加载 Employee - 2 时,我不希望 hibernate 访问数据库来获取技能,而是使用Skill缓存中已经可用的实例。这可能吗?如果有怎么办?

休眠配置

删除了导入、getter 和 setter 的实体

加载第二个员工及其技能的 SQL

我特别想避免第二个查询,因为第一个查询无论如何都是不可避免的。