问题标签 [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 回答
348 浏览

hibernate - Hibernate L2 Cache 的事务策略

如果 Hibernate L2 缓存供应商支持“事务”策略,那么这是否意味着该缓存保证事务之间的隔离级别与 Hibernate 配置中指定的相同?

例如,如果缓存支持“读写”策略,那么它保证 REPEATABLE_READ 隔离级别(在某些情况下只有 READ_COMMITTED 级别)。

0 投票
1 回答
4715 浏览

hibernate - 休眠二级缓存不缓存提交的实体

我想知道 Hibernate 二级缓存(我们正在使用 EHCache)是否有可能允许应用程序缓存已提交给数据库的实体,如果它知道没有其他应用程序正在修改数据库。

我的想法是,如果我更新记录 A,那么我知道记录 A 的值并且应该能够缓存它,像 Terracotta 这样的 JVM 集群系统在使用 Java 同步锁的 JVM 堆内存方面支持这种类型的行为。

Hibernate中的EHCache锁模式配置

0 投票
4 回答
6685 浏览

hibernate - JBossCache 作为 JBoss 5 中 Hibernate 的二级缓存

这是我的配置:Hibernate 3.3.1.GA、JBoss 5.1.0.GA、JBoss Cache 3.2.0.GA。

我正在按照此处所述进行休眠配置: http ://www.jboss.org/community/wiki/ClusteredJPAHibernateSecondLevelCachinginJBossAS5

但收到指定属性无效的错误:

所以,我不能使用“cache.region.factory_class”属性,而只能使用“cacheRegionFactoryClass”(在异常中显示)。

我不能使用任何其他属性,如 cache.region.*,因此无法为我的休眠配置二级缓存。

谁能给我一个链接如何使用 JBoss 5.1 配置 JBoss Cache 3.2?我对 JndiSharedJBossCacheRegionFactory 和 JndiMultiplexedJBossCacheRegionFactory 特别感兴趣。

0 投票
3 回答
7579 浏览

java - 休眠:在级联删除项目时清理集合的二级缓存

我有一个问题 Hibernate 不会为要被级联删除的项目集合更新二级缓存。

细节

假设我们有一个对象 Parent,它有 Parent.myChildren 的 Child 对象集合。现在我们还拥有带有 Humans.myAllHumans 集合的 Humans 对象,并且所有 Parent 和 Child 对象都在该集合中。
现在我们session.delete(parent)和所有的孩子都从数据库中级联删除,但是 Humans.myAllHumans 集合的缓存没有更新!它仍然假设级联删除的对象在数据库中,并且我们在稍后尝试迭代集合时遇到以下异常:
org.hibernate.ObjectNotFoundException:不存在具有给定标识符的行:[foo.Child#751]

尝试的方法

1)我尝试过SessionFactory.evictCollection()方法,但据我所知,它不是事务安全的,并且会从二级缓存中硬删除数据,我不希望这样。

2)我也可以手动(以编程方式)从 myAllHumans 集合中删除每个对象。在这种情况下,hibernate 会更新二级缓存。我想避免这种方法,因为它只会使级联删除功能无用。

预期的

我希望 hibernate 足够聪明,可以自动更新集合的缓存。可能吗?
我现在正在使用 EhCache,您认为使用其他缓存实现或配置 EhCache 可能会有所帮助吗?

0 投票
1 回答
1363 浏览

wcf - NHibernate 查询缓存和 WCF

我已经为我的一个查询启用了查询缓存,当我运行测试或控制台应用程序时,它工作正常(查询结果来自查询缓存和来自二级缓存的实体)。但是,如果我通过 WCF 服务运行相同的查询,则永远不会命中缓存。

我还检查了这两种情况下的日志,在缓存未命中之前它们实际上是相同的。

这是显示缓存放置的 NH 日志:

这是显示缓存未命中的 NH 日志:

这是 NH 的日志显示缓存命中,当不在 WCF 服务中时:

这是我用来进行查询的代码:

为什么缓存没有被命中?

0 投票
6 回答
22563 浏览

database - 当另一个进程修改数据库时休眠二级缓存失效

我们有一个应用程序使用 Hibernate 的二级缓存来避免数据库命中。

我想知道当外部进程(例如 MySQL 管理员)直接连接到修改数据库(更新/插入/删除)时,是否有一些简单的方法可以使 Java 应用程序的 Hibernate 二级缓存无效。

我们使用EHCache作为我们的二级缓存实现。

我们混合使用@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) 和@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE),并且我们没有使用每个实体上的时间戳启用乐观并发控制。

SessionFactory 包含管理二级缓存的方法: -管理缓存

但是因为我们使用@Cache 注释单个实体类,所以我们没有中心位置可以“可靠地”(例如,没有手动步骤)将其添加到列表中。

Hibernate 的二级缓存没有真正的方法知道数据库中的实体已更改,除非它查询该实体(这是缓存保护您免受的)。因此,也许作为一种解决方案,我们可以简单地调用一些方法来强制二级缓存驱逐所有内容(同样由于缺乏锁定和并发控制,您可能会在进行中的事务中“读取”或更新陈旧数据)。

0 投票
1 回答
1650 浏览

nhibernate - NHibernate 命名查询和二级缓存

我有以下映射

以及 hibernate.cfg.xml 中的以下配置

现在,当我使用调用映射集合的 SetCacheable(true) 运行命名查询时,它不会到达二级缓存。有什么理由吗?

更一般地说,有没有办法将命名查询的结果集放入二级缓存?

谢谢!

0 投票
1 回答
13478 浏览

nhibernate - 从 NHibernate 二级缓存中删除对象

我刚开始考虑在我的一个应用程序中使用 NHibernate 二级缓存。我可能会使用NHibernate.Caches.SysCache.SysCacheProvider依赖于 ASP.net 缓存的。

启用缓存不是问题,但我想知道如何管理缓存,例如以编程方式从缓存中删除某些实体等。

我的应用程序是某种图像数据库。用户通过后端上传图像,并可以通过访问在前端查看它/ImageDb/Show?userId=someUserId

数据不会经常变化。如果它发生变化,用户不会关心后端中名为“清除我的缓存”的按钮,该按钮会从缓存中删除该用户的缓存对象。

我在网上找到了一个解决方案,可以从 nhibernates 二级缓存中删除所有缓存的对象。但这对我来说有点太暴力了......我不想仅仅因为一个用户试图清除他自己的数据的缓存,就清除数十个用户的整个缓存。

所以我基本上想做的是:有选择地从 C# 中的 nhibernates 二级缓存中删除缓存的 db 对象。

这可能吗?我想这也取决于缓存提供程序。如果这对 ASP.net 缓存提供程序不可行,我愿意接受其他内置/开源建议。

0 投票
4 回答
34735 浏览

java - 休眠缓存策略

我如何决定CacheConcurrencyStrategy使用哪个?

  • NonstrictReadWriteCache,
  • ReadOnlyCache,
  • ReadWriteCache,
  • TransactionalCache.

我阅读了https://www.hibernate.org/hib_docs/v3/api/org/hibernate/cache/CacheConcurrencyStrategy.html,但解释得不够详细。

0 投票
2 回答
4691 浏览

java - 为 jpa 实体配置 ehcache.xml 或使用注释?

当使用 ehcache 而不是定义语句时

可以独立于我们使用的任何缓存提供程序直接定义内部实体吗?

参考:http : //wiki.eclipse.org/EclipseLink/Examples/JPA/Caching(它只显示 EclipseLink,不显示 ehcache)