我在Hibernate 5.3.2和Hazelcat 3.10.4中使用了带有Hazelcast的Hibernate L2缓存,具有hazelcast-all和hibernate-jcache依赖关系,而Spring在5.0.6中。还尝试了最新的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”)下,在500ms以下的性能就非常好。
据我所知,原因可能不是群集网络流量,因为在只有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这么慢,可能我错过了加快速度的配置。有人可以给我一个提示吗?
谢谢
答案 0 :(得分: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");
请尝试使用这些属性。