5.4. 带有生命周期和最大闲置的过期时间


expiration 配置 Data Grid,以便在达到以下时间限制时从缓存中删除条目:

Lifespan
设置条目可以存在的最长时间。
最大闲置
指定条目可以保持闲置的时长。如果没有对条目发生操作,则它们就会被闲置。
重要

最大闲置过期目前不支持使用持久性存储的缓存。

注意

如果您将过期和驱除用于 EXCEPTION 驱除策略、已过期但尚未从缓存中删除的条目,则计数为数据容器的大小。

5.4.1. 过期如何工作

当您配置过期时,Data Grid 会使用决定何时过期的元数据存储密钥。

  • lifespan 使用 创建 时间戳和 lifespan 配置 属性的值。
  • 最大闲置使用 最后一个使用 的时间戳,以及 max-idle 配置属性的值。

Data Grid 检查是否设置了 lifespan 或最大空闲元数据,然后将值与当前时间进行比较。

如果 (creation + lifespan < currentTime)(lastUsed + maxIdle < currentTime),Data Grid 检测到该条目已过期。

每当访问条目或由过期后找到条目时,就会过期。

例如,k1 达到最大空闲时间,客户端发出 Cache.get (k1) 请求。在这种情况下,Data Grid 检测到条目已过期,并将其从数据容器中删除。Cache.get (k1) 请求返回 null

网格也会从缓存存储中过期条目,但只适用于生命周期到期。最大闲置过期不适用于缓存存储。对于缓存加载程序,Data Grid 无法使条目过期,因为加载程序只能从外部存储读取。

注意

Data Grid 将 原语数据类型添加到缓存条目的过期元数据。这可增加密钥的大小,其大小为 32 字节。

5.4.2. 过期原因

Data Grid 使用一个定期运行的收款线程来检测和删除过期的条目。过期后期将确保不再访问的过期条目已被删除。

Data Grid ExpirationManager 接口处理 expiration reaper,并公开 processExpiration () 方法。

在某些情况下,您可以禁用过期时间恢复程序并通过调用 processExpiration () 来手动过期条目;例如,如果您使用本地缓存模式并定期运行维护线程的自定义应用程序。

重要

如果使用集群缓存模式,则永远不会禁用过期过程。

在使用缓存存储时,网格始终使用过期程序。在这种情况下,您无法禁用它。

5.4.3. 最大闲置和集群缓存

因为最大闲置过期取决于缓存条目的最后访问时间,所以它有一些集群缓存模式的限制。

通过生命周期期限,缓存条目的创建时间提供跨集群缓存的一致性值。例如,所有节点上的 k1 创建时间都相同。

对于使用集群缓存的最大闲置过期,条目的最后访问时间并不始终在所有节点上相同。为确保在集群间都有相同的相对访问时间,当访问密钥时,Data Grid 会将 touch 命令发送到所有所有者。

Data Grid 发送的 touch 命令具有以下注意事项:

  • cache.get () 请求不会返回,直到所有 touch 命令都完成。此同步行为会增加客户端请求的延迟。
  • touch 命令还会更新所有所有者上的缓存条目的"重新访问"元数据,Data Grid 用于驱除。

附加信息

  • 最大闲置过期不适用于 invalidation 模式。
  • 集群缓存中的迭代可以返回超过最大空闲时间限制的过期条目。此行为可确保性能,因为在迭代过程中不会执行远程调用。另请注意,迭代不会刷新任何过期的条目。

5.4.4. 为缓存配置 lifespan 和最大闲置时间

为缓存中的所有条目设置 lifespan 和最大闲置时间。

流程

  1. 打开 Data Grid 配置以进行编辑。
  2. 指定条目可以使用 lifespan 属性或 lifespan () 方法保留在缓存中的时间(以毫秒为单位)。
  3. 使用 max-idle 属性或 maxIdle () 方法,指定条目在最后一次访问后可以保持闲置的时间(以毫秒为单位)。
  4. 保存并关闭您的 Data Grid 配置。
Data Grid 缓存过期

在以下示例中,Data Grid 会在最后一次访问时间后 5 秒或 1 秒后过期所有缓存条目,以先发生:

XML

<replicated-cache>
  <expiration lifespan="5000" max-idle="1000" />
</replicated-cache>

JSON

{
  "replicated-cache" : {
    "expiration" : {
      "lifespan" : "5000",
      "max-idle" : "1000"
    }
  }
}

YAML

replicatedCache:
  expiration:
    lifespan: "5000"
    maxIdle: "1000"

ConfigurationBuilder

ConfigurationBuilder builder = new ConfigurationBuilder();
builder.expiration().lifespan(5000, TimeUnit.MILLISECONDS)
                    .maxIdle(1000, TimeUnit.MILLISECONDS);

5.4.5. 配置每个条目的 lifespan 和最大闲置时间

为单个条目指定 lifespan 和最大闲置时间。当您向条目添加 lifespan 和最大闲置时间时,这些值优先于缓存过期配置。

注意

当您为缓存条目明确定义 lifespan 和最大空闲时间值时,Data Grid 会在集群中复制这些值,以及缓存条目。同样,Data Grid 也会将过期值和条目写入持久性存储。

流程

  • 对于远程缓存,您可以将 lifespan 和最大闲置时间添加到通过 Data Grid 控制台交互的条目。

    使用 Data Grid 命令行界面(CLI),通过 put 命令使用 --max-idle = 和--ttl= 参数。

  • 对于远程和嵌入式缓存,您可以使用 cache.put () 调用添加 lifespan 和 maximum idle times。

    //Lifespan of 5 seconds.
    //Maximum idle time of 1 second.
    cache.put("hello", "world", 5, TimeUnit.SECONDS, 1, TimeUnit.SECONDS);
    
    //Lifespan is disabled with a value of -1.
    //Maximum idle time of 1 second.
    cache.put("hello", "world", -1, TimeUnit.SECONDS, 1, TimeUnit.SECONDS);
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.