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 和最大闲置时间。
流程
- 打开 Data Grid 配置进行编辑。
- 
							使用 lifespan属性或lifespan ()方法指定条目可在缓存中的时间量(以毫秒为单位)。
- 
							使用 max-idle属性或maxIdle ()方法,以毫秒为单位指定条目在最后一次访问后可以保持闲置的时间量。
- 保存并关闭您的数据网格配置。
数据网格缓存过期
在以下示例中,Data Grid 会在上次访问时间后 5 秒或 1 秒后过期所有缓存条目,以防出现以下情况:
XML
<replicated-cache> <expiration lifespan="5000" max-idle="1000" /> </replicated-cache>
<replicated-cache>
  <expiration lifespan="5000" max-idle="1000" />
</replicated-cache>JSON
YAML
replicatedCache:
  expiration:
    lifespan: "5000"
    maxIdle: "1000"
replicatedCache:
  expiration:
    lifespan: "5000"
    maxIdle: "1000"ConfigurationBuilder
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.expiration().lifespan(5000, TimeUnit.MILLISECONDS)
                    .maxIdle(1000, TimeUnit.MILLISECONDS);
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 也会将过期值与条目一起写入持久性存储。
流程
- 对于远程缓存,您可以使用 Data Grid 控制台以交互方式将 lifespan 和最大闲置时间添加到条目。 - 通过 Data Grid 命令行界面(CLI),在 - put命令中使用- --max-idle=和- --ttl=参数。
- 对于远程和嵌入缓存,您可以使用 - cache.put ()调用添加 lifespan 和最大闲置时间。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow