gpt4 book ai didi

java - Infinispan JPA 二级缓存默认值

转载 作者:搜寻专家 更新时间:2023-10-31 19:53:30 25 4
gpt4 key购买 nike

我正在尝试将 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对于实体被命名为 entity:

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.

collectionimmutable-entitynaturalid 的默认配置也是为entity 指定的配置,所以您不必单独配置它们(当然如果您不想单独配置),如 documentation 中所示和 source code .

注意

一般来说,使 Hibernate L2 缓存分布式可能不是一个好主意,因为实体实例存储在 disassembled hydrated state 中。在 L2 缓存中,这意味着只有关联实体的 ID 与父实体状态一起存储。

假设您有以下实体(ABC 都是可缓存的):

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

@OneToMany
private Collection<C> cs;
}

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

  1. 获取实体 A 状态。
  2. 根据 b 关联中存储的 id 获取实体 B 状态。
  3. 获取 cs id 的集合。
  4. 对于 cs 集合中的每个 id,逐一获取 C 实体状态。

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

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

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

关于java - Infinispan JPA 二级缓存默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35435236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com