ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – Infinispan JPA二级缓存默认值

2019-05-16 19:49:48  阅读:285  来源: 互联网

标签:java jpa hibernate infinispan second-level-cache


我正在尝试将Infinispan配置为hibernate二级缓存.一切都很好,但我想调整默认配置,即所有缓存共享的值.

为使用@Cache注释的实体自动创建缓存,我可以在infinispan.xml中通过< distributed-cache-configuratoin>逐个自定义缓存.但是,我希望所有这些缓存都有默认值(例如驱逐策略).

另一件事是,我想将所有这些生成的缓存标记为“分布式”(默认情况下它们是“本地”).

这是我infinispan.xml的一个例外:

<cache-container default-cache="default" statistics="true">
    <transport stack="external-file" />
    <!-- Configuring specifics for the User entity. How to do it globally? -->
    <distributed-cache-configuration name="user" statistics="true" />
</cache-container>

我该怎么做这些事情?

解决方法:

实体的default cache configuration是命名实体:

Cache configuration can differ for each type of data stored in the
cache. In order to override the cache configuration template, use
property hibernate.cache.infinispan.data-type.cfg where data-type
can be one of:

entity Entities indexed by @Id or @EmbeddedId attribute.

immutable-entity Entities tagged with @Immutable annotation or set
as mutable=false in mapping file.

naturalid Entities indexed by their @NaturalId attribute.

collection All collections.

timestamps Mapping entity type → last modification timestamp. Used
for query caching.

query Mapping query → query result.

pending-puts Auxiliary caches for regions using invalidation mode
caches.

集合,immutable-entity和naturalid的默认值也是为实体指定的配置,因此您不必单独配置它们(如果您不希望单独配置),如documentationsource code.

注意

通常,分发Hibernate L2缓存可能不是一个好主意,因为实体实例存储在L2缓存中的disassembled hydrated state中,这意味着只有关联实体的ID与父实体状态一起存储.

假设您有以下实体(A,B,C都是可缓存的):

@Entity
public class A {
  @ManyToOne
  private B b;

  @OneToMany
  private Collection<C> cs;
}

即使cs集合也是可缓存的,要从缓存中完全组装实体A实例,您将有以下网络往返于集群的其他节点:

>获取实体A状态.
>根据存储在b关联中的id获取实体B状态.
>获取cs id的集合.
>对于cs集合中的每个id,逐个获取C实体状态.

显然,如果您正在组装A实例的集合(例如,从查询的结果),则对A的每个实例执行上述所有操作.

这一切都意味着直接从数据库中读取数据(使用正确配置的延迟加载,例如使用batch size),可能比分布式缓存中的所有网络往返更有效.

此外,这也是实体/集合缓存应在失效集群模式下运行的原因之一(数据仅缓存在读取/写入它的节点上,但在更改时在其他节点上无效).

标签:java,jpa,hibernate,infinispan,second-level-cache
来源: https://codeday.me/bug/20190516/1116011.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有