entity:
对于缓存中存储的每种数据,缓存配置可能有所不同。为了覆盖缓存配置模板,请使用属性
hibernate.cache.infinispan.data-type.cfgwhere,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缓存的,也要从缓存中完全组装一个实体实例,您将需要以下网络往返于群集的其他节点:
- 获取实体
A
状态。 B
根据b
关联中存储的ID 获取实体状态。- 获取
cs
ID 的集合。 - 对于
cs
集合中的每个IDC
,一一读取实体状态。
显然,如果您要组装
A实例的集合(例如,根据查询结果),则对的每个实例都执行上述所有 *** 作
A。
所有这些都意味着,直接从数据库中读取数据(例如,通过适当配置的延迟加载,例如使用批处理大小),可以比分布式缓存中的所有网络往返高效得多。
同样,这也是实体/集合缓存应在失效集群模式下运行的原因之一(数据仅在读取/写入数据的节点上缓存,而在更改时在其他节点上无效)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)