【问题标题】:Hazelcast L2 cache slowHazelcast L2 缓存慢
【发布时间】:2019-01-29 03:38:19
【问题描述】:

我在 Hibernate 5.3.2 和 Hazelcat 3.10.4 版本中使用带有 Hazelcast 的 Hibernate L2 缓存,带有 hazelcast-all 和 hibernate-jcache 依赖项以及 5.0.6 中的 Spring。还尝试了最近的 Hibernate 5.4.0 和 Hazelcat 3.11.1。

我有一个不太复杂或深度的 ERM,数据库中大约有大约 7000 个(缓存)对象。我使用 @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) 配置了实体和集合,并且很好地针对在获取缓存数据时不会执行单个 sql。

到目前为止还不错,但性能无法接受,例如没有 L2 缓存 ~4s 来获取实体,使用 Hazelcast L2 缓存完全没有性能提升!
使用 Ehcache(在我的集群环境中不是一个选项),在相同的查询和相同的 Hibernate 配置(只是更改了“hibernate.cache.region.factory_class”)下,性能非常好,不到 500 毫秒。

据我所知,原因不可能是集群网络流量,因为在我的本地机器上它已经很慢了,只有 1 个结。

Hazelcast 配置没什么特别的,Hazelcast L2 客户端配置看起来像这样

<hazelcast-client xsi:schemaLocation="http://www.hazelcast.com/schema/client-config hazelcast-client-config-3.10.xsd"
        xmlns="http://www.hazelcast.com/schema/client-config"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<instance-name>hazelcast-l2-client</instance-name>
  <group>
    <name>${HZGroupName}</name>
    <password>${HZGroupPassword}</password>
  </group>
  <network>
    <cluster-members>
      <address>${HZLocalAddress}</address>
      <address>${HZMemberAddress}</address>
    </cluster-members>
  </network>
</hazelcast-client>

休眠配置

jpaAdditionalProperties.setProperty("hibernate.cache.region.factory_class", "org.hibernate.cache.jcache.JCacheRegionFactory");
jpaAdditionalProperties.setProperty("hibernate.cache.use_query_cache", "true");

所以我现在有点无能为力,不敢相信 Hazelcast 这么慢,可能我错过了加快速度的配置。有人可以给我一个提示吗?

谢谢

【问题讨论】:

标签: java spring hibernate hazelcast


【解决方案1】:

@Labtax,您还需要设置这些属性,以便您的 Hibernate L2 缓存使用 Hazelcast:

jpaAdditionalProperties.setProperty("hibernate.cache.region.factory_class", "com.hazelcast.hibernate.HazelcastCacheRegionFactory");
jpaAdditionalProperties.setProperty("hibernate.cache.hazelcast.use_native_client", "true");

请尝试使用这些属性。

【讨论】:

  • 免责声明:我是 OP 的同事,因此也参与了 Hazelcast 问题。我们的项目已经使用了与com.hazelcast.hibernate.HazelcastCacheRegionFactory 不兼容的Hibernate 5.x(它依赖于org.hibernate.cache.QueryResultsRegion,这似乎从Hibernate 4 开始就消失了)。因此,我们的设置基于 JCacheRegionFactory。通常,似乎使用了 L2 缓存,因为确实没有记录 SQL 语句(当我们禁用 Hazelcast JPA 配置时它们会出现)。这就是说,您提出的解决方案对我们不起作用:-(
  • 编辑:刚刚发现了新版本的 hazelcast-hibernate 依赖项。也许它适用于那个和你的设置。
  • 好的,在切换到 hazelcast-hibernate53 并将 hazelcast-all 替换为仅需要的模块后,它也适用于您的参数。是的,使用本机客户端似乎可以将缓存性能提高 20% 左右。从 Hazelcast 3.10.4 更改为 3.11.1 似乎也再次提高了 20%,因此我们可以将请求时间减少约 36%。与我们使用其他工具可以看到的情况相去甚远,但总的来说还不错。谢谢!
  • @Markus K,如果你使用嵌入式 Hazelcast,因为不会有任何网络流量,它会快很多。删除我共享的第二个参数并使用 hazelcast.xml 文件,而不是 hazelcast-client.xml。您会发现它的速度要快得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-01
  • 2011-06-10
  • 1970-01-01
  • 2015-06-29
相关资源
最近更新 更多