12.8. 第二级缓存


12.8.1. 关于第二级缓存

第二级缓存是在应用会话外保留信息的本地数据存储。缓存由持久性提供商管理,通过将数据与应用分开来改进运行时。

JBoss EAP 支持用于以下目的的缓存:

  • Web Session Clustering
  • 有状态的 Session Bean Clustering
  • SSO 集群
  • Hibernate 第二级缓存
  • Jakarta Persistence second-level Cache
警告

每个缓存容器定义一个 repl 和一个 dist 缓存。用户应用不应直接使用这些缓存。

12.8.1.1. 默认的二级缓存供应商

Infinispan 是 JBoss EAP 的默认第二级缓存提供程序。Infinispan 是带有可选架构的分布式内存中键/值数据存储,在 Apache License 2.0 下提供。

12.8.1.1.1. 在 Persistence 单元中配置二级缓存
注意

为确保与将来的 JBoss EAP 版本兼容,应使用 Infinispan 子系统(而非 persistence.xml 属性覆盖)自定义缓存配置。

您可以使用 persistence 单元 的 shared-cache-mode 元素来配置第二级缓存。

  1. 请参阅 创建一个 Simple Jakarta Persistence Application,以便在 Red Hat CodeReady Studio 中创建 persistence.xml 文件。
  2. persistence.xml 文件中添加以下内容:

    <persistence-unit name="...">
      (...) <!-- other configuration -->
      <shared-cache-mode>SHARED_CACHE_MODE</shared-cache-mode>
      <properties>
        <property name="hibernate.cache.use_second_level_cache" value="true" />
        <property name="hibernate.cache.use_query_cache" value="true" />
      </properties>
    </persistence-unit>
    Copy to Clipboard Toggle word wrap

    SHARED_CACHE_MODE 元素可以使用以下值:

    • ALL :所有实体都应被视为可缓存。
    • 新增 :任何实体都不应被视为可缓存。
    • ENABLE_SELECTIVE :仅标记为可缓存的实体才应被视为可缓存。
    • DISABLE_SELECTIVE :除明确标记为不可缓存的实体外的所有实体都应被视为可缓存。
    • UNSPECIFIED :行为未定义。适用特定于提供商的默认值。

示例:使用 persistence.xml更改 实体local-query 缓存的属性

<persistence ... version="2.2">
    <persistence-unit ...>
        ...
        <properties>
            <!-- Values below are not recommendations. Appropriate values should be determined based on system use/capacity. -->

            <!-- entity default overrides -->
            <property name="hibernate.cache.infinispan.entity.memory.size" value="5000"/>
            <property name="hibernate.cache.infinispan.entity.expiration.max_idle" value="300000"/> <!-- 5 minutes -->
            <property name="hibernate.cache.infinispan.entity.expiration.lifespan" value="1800000"/> <!-- 30 minutes -->
            <property name="hibernate.cache.infinispan.entity.expiration.wake_up_interval" value="300000"/>  <!-- 5 minutes -->

            <!-- local-query default overrides -->
            <property name="hibernate.cache.infinispan.query.memory.size" value="5000"/>
            <property name="hibernate.cache.infinispan.query.expiration.max_idle" value="300000"/> <!-- 5 minutes -->
            <property name="hibernate.cache.infinispan.query.expiration.lifespan" value="1800000"/> <!-- 30 minutes -->
            <property name="hibernate.cache.infinispan.query.expiration.wake_up_interval" value="300000"/> <!-- 5 minutes -->
        </properties>
    </persistence-unit>
</persistence>
Copy to Clipboard Toggle word wrap

Expand
表 12.1. 实体 和本地查询缓存 的属性
属性描述

memory.size

表示 object-memory 大小。

expiration.max_idle

表示在缓存中维护缓存条目的最大空闲时间(以毫秒为单位)。

expiration.lifespan

表示缓存条目过期的最大生命周期span(以毫秒为单位)。默认为 60 秒。无限期限可以使用 -1 指定。

expiration.wake_up_interval

表示后续运行之间的间隔(以毫秒为单位)从缓存中清除过期的条目。可以使用 -1 禁用过期时间。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat