数据过期类型和策略概述
NCache 提供多种先进的基于时间的数据失效策略,通过允许您指定数据过期的确切时间或间隔,来确保数据完整性并优化集群存储。当数据变更频率可预测时,这些策略尤其有用。例如,静态区域信息的失效频率低于快速变化的产品库存水平。通过使过期数据失效, NCache 确保客户在下次请求时始终能从数据库中获得最相关、最新的数据。
除了数据新鲜度之外,这些策略对于会话管理也至关重要,它们可以自动移除空闲或不活跃的会话,从而释放资源。当为某个项目配置了过期时间时, NCache 在专门的到期指数中对其进行追踪。
数据删除由一个专用线程处理,该线程会根据可配置的条件检查过期项。 Clean Interval (默认值为 15 秒)。物品移除的总延迟计算如下:
总时间 = 过期时间 + 清洁间隔 + 清洁活动时间
根据此公式,根据应用程序的过期时间和性能要求配置清理间隔,以在各种集群拓扑中保持高性能、新鲜的数据集。
绝对过期时间防止数据过期
您可以通过指定项目应失效的确切日期和时间,将项目添加到具有绝对过期功能的缓存中。 当这个时间过去后,该项目将从缓存中删除。 这里, NCache 在缓存服务器上维护绝对过期的 UTC 时间,这有利于客户端和缓存服务器位于不同时区的情况。 这意味着客户端指定的过期时间(在任何时区)将在缓存服务器上转换为 UTC,并且该项目将在客户端指定的确切日期和时间过期。 您可以指定过期时间,范围从秒到天或月。
但是请注意,该项会在下一个缓存清理周期到期后被移除。例如,如果您将某项的过期时间设置为 10 秒,而缓存清理周期设置为 15 秒,则该项将在大约 15-25 秒内被移除。
会话管理中的滑动过期时间
在这种缓存过期机制下,您希望缓存保留应用程序正在使用的数据,并在特定时间段后删除未使用的数据。每次用户访问具有滑动过期机制的缓存数据时,其缓存生命周期都会延长指定的过期时间。例如,如果用户至少 30 秒未访问某个具有 30 秒滑动过期机制的项目,则该项目将从缓存中移除。但是,每次访问后,该项目的过期时间都会重置为 30 秒,从而将其在缓存中的生命周期延长 30 秒。
例如,会话数据可以在会话处于活动状态期间存储在缓存中。对于此类数据,您可以指定滑动过期时间,例如 15 分钟。因此,如果在指定的时间间隔内发生活动,则缓存中会话的过期时间间隔将重置为 15 分钟。
与绝对过期类似,具有滑动过期的缓存项将在缓存清理间隔内删除。
警告
如果缓存项未设置过期时间,它将一直保留在缓存中,直到被显式删除。这可能会导致缓存存储空间过大。
另请参阅 驱逐政策这是另一个特点 NCache 控制缓存存储使用。
可配置的默认过期策略
NCache 它还支持默认过期时间,帮助您更灵活地配置数据失效策略。默认过期时间可通过以下方式配置: NCache 管理中心或 配置文件因此,如果您想修改通过 API 传递的过期值,无需更改代码。此外,如果同一个应用程序需要多个过期值,可以使用默认过期值。
NCache 提供以下默认过期时间:
- 默认绝对值
- 默认滑动
- 默认绝对更长
- 默认滑动更长
所有默认到期时间的最小值为 5 秒。
假设 Default Absolute 配置为 5 秒,Default Sliding Longer 到期配置为 10 秒。 的对象 产品 类被添加到缓存中,默认过期时间为绝对值;会话被添加到缓存中,默认过期时间为滑动延长值。对象添加后,您希望将两者的过期时间都更改为 15 秒。您无需使用新的过期时间重新插入对象,只需更改配置即可。 NCache 管理中心或 配置文件,无需任何代码更改。
通过以下方式配置过期策略有多种场景 NCache 管理中心和 API 的功能可能会重叠,并触发以下行为。请注意,非默认过期时间指的是绝对过期时间和滑动过期时间。
| 默认到期 | API 调用过期 | 宠物行为研究 |
|---|---|---|
| 配置 | 默认到期 | 默认到期 |
| 配置 | 非默认到期 | 非默认到期 |
| 配置 | 没有 | 默认到期 |
| 未配置 | 默认到期 | 没有过期 |
| 未配置 | 非默认到期 | 非默认到期 |
| 未配置 | 没有 | 没有过期 |
重要提示
对于 CacheItem,Absolute 和 Sliding Expiration 的默认值分别为“NoAbsoluteExpiration”和“NoSlidingExpiration”。因此,如果配置了 Default Expiration 但在 API 中未配置到期时间,则 CacheItem, 由于其默认到期时间值将覆盖已配置的默认到期时间,因此不会发生到期。
集群范围的过期处理和拓扑结构
在具有多个缓存服务器的集群缓存中,过期行为取决于配置的拓扑结构。
- 在一个 已复制 缓存过期由协调节点执行,然后同步到其他集群节点。
- 在一个 分区的 在拓扑结构中,由于数据分布在不同的节点上,每个节点负责使其自身的数据项过期。
- 对于 分区副本 拓扑,过期将在活动节点上执行并传播到它们各自的副本。
- 客户端缓存 将采用与集群缓存相同的过期时间。但是,滑动过期时间在与缓存同步后会以绝对过期时间的形式添加,因为如果集群缓存中的值是滑动的,而客户端缓存中的值不是,则可能导致不一致。