5.4. 带有 lifespan 和最大闲置的过期


expiration 配置 Data Grid,以在访问以下时间限制之一时从缓存中删除条目:

lifespan
设置条目可以存在的最长时间。
最大闲置
指定条目可以保持闲置的时长。如果条目没有发生操作,它们就会变为空闲状态。
重要

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

注意

如果您使用 EXCEPTION 驱除策略的过期和驱除,则过期但尚未从缓存中移除的条目,则计入数据容器的大小。

5.4.1. 过期如何工作

当您配置过期时,数据网格使用元数据存储密钥,以确定条目何时过期。

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

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

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

每当访问或者由过期程序访问或找到条目时,就会发生过期时间。

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

数据网格还从缓存存储过期条目,但仅过期时间。最大空闲的过期时间无法使用缓存存储。在缓存加载程序的情况下,Data Grid 无法过期条目,因为加载程序只能从外部存储中读取。

注意

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

5.4.2. 过期获取器

数据网格使用定期运行的已消耗程序线程来检测和删除过期的条目。过期删除程序确保删除不再访问的过期条目。

Data Grid ExpirationManager 接口处理过期程序,并公开 processExpiration () 方法。

在某些情况下,您可以通过调用 processExpiration ()来禁用过期条目,并通过调用 processExpiration () 手动过期条目;如果您使用的是本地缓存模式,该模式会定期运行维护线程。

重要

如果使用集群缓存模式,您绝不应该禁用过期程序。

在使用缓存存储时,数据网格总是使用过期。在这种情况下,您无法禁用它。

5.4.3. 最大闲置和集群缓存

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

随着 lifespan 过期,缓存条目的创建时间提供了在集群缓存之间一致的值。例如,所有节点上的 k1 的创建时间始终都相同。

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

数据网格发送的 touch 命令有以下考虑:

  • cache.get () 请求不会返回,直到所有 touch 命令都完成。这个同步行为会增加客户端请求的延迟。
  • touch 命令还会更新 "recently accessed" 元数据,用于所有所有者上的缓存条目,以供数据网格用于驱除。
  • 通过使用分散的缓存模式,数据网格将命令发送到所有节点,而不仅仅是主和备份所有者。

附加信息

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

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

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

流程

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

在以下示例中,Data Grid 会在上次访问时间后 5 秒或 1 秒后过期所有缓存条目,以防出现以下情况:

XML

<replicated-cache>
  <expiration lifespan="5000" max-idle="1000" />
</replicated-cache>
Copy to Clipboard Toggle word wrap

JSON

{
  "replicated-cache" : {
    "expiration" : {
      "lifespan" : "5000",
      "max-idle" : "1000"
    }
  }
}
Copy to Clipboard Toggle word wrap

YAML

replicatedCache:
  expiration:
    lifespan: "5000"
    maxIdle: "1000"
Copy to Clipboard Toggle word wrap

ConfigurationBuilder

ConfigurationBuilder builder = new ConfigurationBuilder();
builder.expiration().lifespan(5000, TimeUnit.MILLISECONDS)
                    .maxIdle(1000, TimeUnit.MILLISECONDS);
Copy to Clipboard Toggle word wrap

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

注意

当您明确为缓存条目定义 lifespan 和最大闲置时间值时,Data Grid 会将这些值与缓存条目一起复制。同样,Data Grid 也会将过期值与条目一起写入持久性存储。

流程

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

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

  • 对于远程和嵌入缓存,您可以使用 cache.put () 调用添加 lifespan 和最大闲置时间。

    //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);
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat