Infinispan JPA 2级缓存默认值

Infinispan JPA 2级缓存默认值,第1张

Infinispan JPA 2级缓存默认值

实体的默认缓存配置名为

entity

对于缓存中存储的每种数据,缓存配置可能有所不同。为了覆盖缓存配置模板,请使用属性

hibernate.cache.infinispan.data-type.cfg
where,
data-type
可以是以下之一:

entity
@Id
@EmbeddedId
属性建立索引的实体

immutable-entity
带有
@Immutable
注释标签或设置为
mutable=false
映射文件中的实体。

naturalid
按其
@NaturalId
属性索引的实体。

collection
所有收藏。

timestamps
映射实体类型→上次修改时间戳。用于查询缓存。

query
映射查询→查询结果。

pending-puts
使用失效模式缓存的区域的辅助缓存。

默认的

collection
immutable-entity
并且
naturalid
也是指定的配置
entity
,这样你就不必单独配置它们(如果你不想当然单独配置),因为可以在中看到文档和源代码。

注意

通常,使Hibernate L2缓存分布式可能不是一个好主意,因为实体实例以反汇编的水合状态存储在L2缓存中,这意味着仅关联实体的ID与父实体状态一起存储。

假设你有以下实体(

A
B
C
都是超高速缓存):

@Entitypublic class A {  @ManyToOne  private B b;  @oneToMany  private Collection<C> cs;}

即使该

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

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

显然,如果您要组装

A
实例的集合(例如,根据查询结果),则对的每个实例都执行上述所有 *** 作
A

所有这些都意味着,直接从数据库中读取数据(例如,通过适当配置的延迟加载,例如使用批处理大小),可以比分布式缓存中的所有网络往返高效得多。

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



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5507072.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存