5.3. 使用 Data Grid 缓存驱除


驱除可让您以两种方式之一从内存中删除条目来控制数据容器的大小:

  • 条目总数(max-count)。
  • 最大内存量(max-size)。

驱除一次从数据容器丢弃一个条目,并且对发生的节点而言是本地的。

重要

驱除从内存中删除条目,但不会从持久缓存存储中删除条目。要确保条目在 Data Grid 驱除它们后仍然可用,并防止数据不一致,您应该配置持久性存储。

当您配置 内存 时,Data Grid 大致大致是数据容器的当前内存用量。添加或修改条目时,Data Grid 将数据容器的当前内存用量与最大大小进行比较。如果大小超过最大值,Data Grid 会执行驱除。

驱除会在线程中立即发生,添加超过最大大小的条目。

5.3.1. 驱除策略

当您配置 Data Grid 驱除时,您可以指定:

  • 数据容器的最大大小。
  • 在缓存达到阈值时删除条目的策略。

您可以手动执行驱除,或者将 Data Grid 配置为执行以下操作之一:

  • 删除旧条目以为新条目腾出空间。
  • 抛出 ContainerFullException,并阻止创建新条目。

    例外驱除策略只适用于使用 2 阶段提交的事务缓存,而不适用于 1 阶段提交或同步优化。

有关驱除策略的详情,请参阅架构引用。

注意

Data Grid 包括 Caffeine 缓存库,它实现了 Least Frequently Used (LFU)缓存替换算法,称为 TinyLFU。对于非堆存储,Data Grid 使用 Least Recently Used (LRU)算法的自定义实现。

5.3.2. 配置最大计数驱除

将 Data Grid 缓存的大小限制为条目总数。

流程

  1. 打开 Data Grid 配置以进行编辑。
  2. 指定缓存在 Data Grid 执行驱除前可以包含的条目总数,使用 max-count 属性或 maxCount () 方法。
  3. 将以下之一设置为驱除策略,以控制 Data Grid 如何使用 when-full 属性或 Full () 方法删除条目。

    • REMOVE Data Grid 执行驱除。这是默认策略。
    • MANUAL 为嵌入式缓存手动执行驱除。
    • EXCEPTION Data Grid 会抛出异常而不是驱除条目。
  4. 保存并关闭您的 Data Grid 配置。
最大计数驱除

在以下示例中,当缓存包含总计 500 个条目和新条目时,Data Grid 会删除条目:

XML

<distributed-cache>
  <memory max-count="500" when-full="REMOVE"/>
</distributed-cache>
Copy to Clipboard Toggle word wrap

JSON

{
  "distributed-cache" : {
    "memory" : {
      "max-count" : "500",
      "when-full" : "REMOVE"
    }
  }
}
Copy to Clipboard Toggle word wrap

YAML

distributedCache:
  memory:
    maxCount: "500"
    whenFull: "REMOVE"
Copy to Clipboard Toggle word wrap

ConfigurationBuilder

ConfigurationBuilder builder = new ConfigurationBuilder();
builder.memory().maxCount(500).whenFull(EvictionStrategy.REMOVE);
Copy to Clipboard Toggle word wrap

5.3.3. 配置最大大小驱除

将 Data Grid 缓存的大小限制为最大内存量。

流程

  1. 打开 Data Grid 配置以进行编辑。
  2. 指定 application/x-protostream 作为缓存编码的介质类型。

    您必须指定二进制介质类型才能使用最大大小驱除。

  3. 配置最大内存量(以字节为单位),缓存可在 Data Grid 使用 max-size 属性或 maxSize () 方法执行驱除前使用。
  4. (可选)指定测量单位。

    默认值为 B (字节)。请参阅 支持的单元的配置模式。

  5. 将以下之一设置为驱除策略,以控制 Data Grid 如何使用 when-full 属性或 whenFull () 方法删除条目。

    • REMOVE Data Grid 执行驱除。这是默认策略。
    • MANUAL 为嵌入式缓存手动执行驱除。
    • EXCEPTION Data Grid 会抛出异常而不是驱除条目。
  6. 保存并关闭您的 Data Grid 配置。
最大大小驱除

在以下示例中,当缓存的大小达到 1.5 GB (千兆字节)和新条目时,Data Grid 会删除条目:

XML

<distributed-cache>
  <encoding media-type="application/x-protostream"/>
  <memory max-size="1.5GB" when-full="REMOVE"/>
</distributed-cache>
Copy to Clipboard Toggle word wrap

JSON

{
  "distributed-cache" : {
    "encoding" : {
      "media-type" : "application/x-protostream"
    },
    "memory" : {
      "max-size" : "1.5GB",
      "when-full" : "REMOVE"
    }
  }
}
Copy to Clipboard Toggle word wrap

YAML

distributedCache:
  encoding:
    mediaType: "application/x-protostream"
  memory:
    maxSize: "1.5GB"
    whenFull: "REMOVE"
Copy to Clipboard Toggle word wrap

ConfigurationBuilder

ConfigurationBuilder builder = new ConfigurationBuilder();
builder.encoding().mediaType("application/x-protostream")
       .memory()
         .maxSize("1.5GB")
         .whenFull(EvictionStrategy.REMOVE);
Copy to Clipboard Toggle word wrap

5.3.4. 手动驱除

如果您选择手动驱除策略,Data Grid 不会执行驱除。您必须使用 evict () 方法手动完成此操作。

您应该只在嵌入式缓存中使用手动驱除。对于远程缓存,您应该始终使用 REMOVEEXCEPTION 驱除策略配置 Data Grid。

注意

此配置可防止当您启用 passivation 时警告信息,但没有配置驱除。

XML

<distributed-cache>
  <memory max-count="500" when-full="MANUAL"/>
</distributed-cache>
Copy to Clipboard Toggle word wrap

JSON

{
  "distributed-cache" : {
    "memory" : {
      "max-count" : "500",
      "when-full" : "MANUAL"
    }
  }
 }
Copy to Clipboard Toggle word wrap

YAML

distributedCache:
  memory:
    maxCount: "500"
    whenFull: "MANUAL"
Copy to Clipboard Toggle word wrap

ConfigurationBuilder

ConfigurationBuilder builder = new ConfigurationBuilder();
builder.encoding().mediaType("application/x-protostream")
       .memory()
         .maxSize("1.5GB")
         .whenFull(EvictionStrategy.REMOVE);
Copy to Clipboard Toggle word wrap

5.3.5. 使用驱除进行传递

当 Data Grid 驱除条目时,传递会保留数据到缓存存储。如果启用 passivation,则应始终启用驱除,如下例所示:

XML

<distributed-cache>
  <persistence passivation="true">
    <!-- Persistent storage configuration. -->
  </persistence>
  <memory max-count="100"/>
</distributed-cache>
Copy to Clipboard Toggle word wrap

JSON

{
  "distributed-cache": {
    "memory" : {
      "max-count" : "100"
    },
    "persistence" : {
      "passivation" : true
    }
  }
}
Copy to Clipboard Toggle word wrap

YAML

distributedCache:
  memory:
    maxCount: "100"
  persistence:
    passivation: "true"
Copy to Clipboard Toggle word wrap

ConfigurationBuilder

ConfigurationBuilder builder = new ConfigurationBuilder();
builder.memory().maxCount(100);
builder.persistence().passivation(true); //Persistent storage configuration
Copy to Clipboard Toggle word wrap

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat