数据过期类型和策略概述
NCache 支持基于时间的数据失效,您可以指定使缓存数据失效的时间或间隔。 基于时间的数据失效适用于您可以确定数据更改频率的情况。 例如,区域信息可能不会经常更新,因此您可以使用基于时间的过期来使此类数据失效。
此外,缓存中的过期数据会导致相关且更新的数据被提供给客户端。 例如,某个产品的可用单位可能会在数据库中更改,但不会在缓存中更新。 因此,在一定时间段后使缓存中的此类数据过期将导致在下一个客户端请求时将新数据加载到缓存中。
数据过期的另一个用途是维护会话。 如果会话在一段时间内处于非活动状态,则可以将其从缓存中删除,因为它是空闲的。
过期值会添加到缓存项中。 NCache 维护具有基于时间的到期时间的项目的索引。 专用线程会在称为“清理间隔”的可配置时间间隔后定期检查这些过期项目的缓存数据。 默认情况下,其值为 15 秒,这意味着从缓存中删除项目所需的最长时间为(过期时间 + 清理间隔 + 清理活动所花费的时间)。 因此,您应该根据数据的过期时间仔细选择此间隔。
绝对到期
您可以通过指定项目应失效的确切日期和时间,将项目添加到具有绝对过期功能的缓存中。 当这个时间过去后,该项目将从缓存中删除。 这里, NCache 在缓存服务器上维护绝对过期的 UTC 时间,这有利于客户端和缓存服务器位于不同时区的情况。 这意味着客户端指定的过期时间(在任何时区)将在缓存服务器上转换为 UTC,并且该项目将在客户端指定的确切日期和时间过期。 您可以指定过期时间,范围从秒到天或月。
备注
此功能也可用于 NCache Professional.
但是,请注意,当下一个缓存清理间隔到期时,该项目将被删除。 例如,如果您指定某个项目的过期时间为 10 秒,并且缓存清理间隔配置为 15 秒,则该项目将在 15-25 秒的时间范围内删除。
滑动到期
在此期限内,您希望缓存在应用程序正在使用的时间内保留数据,并删除在特定时间段内未使用的任何数据。 每次用户访问具有滑动过期时间的缓存数据时,其缓存寿命都会延长特定的过期时间间隔,例如,具有 30 秒滑动过期时间的项目,如果用户至少 30 秒不访问该项目,则会从缓存中删除该项目。 。 但是,每次访问时,该项目的过期间隔将重置为 30 秒,从而将其在缓存中的寿命延长 30 秒。
备注
此功能也可用于 NCache Professional.
例如,只要会话处于活动状态,会话数据就可以存储在缓存中。 对于此类数据,您可以指定滑动过期时间,假设为 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。 因此,如果配置了默认过期时间,但在 API 中未配置过期时间 CacheItem
,不会发生过期,因为其默认过期值会覆盖配置的默认过期。
集群环境中的过期
在涉及多个缓存服务器的集群缓存环境中,过期的处理方式不同 NCache 拓扑。
- 在 镜像 拓扑中,主动节点将执行过期并在被动节点上进行同步。
- 在 已复制 缓存,过期由协调节点执行,然后操作将同步到其他集群节点。
- 在 分区的 拓扑,由于数据分布在不同的节点上,每个节点负责自己的项目过期。
- 针对 分区副本 拓扑,过期将在活动节点上执行并传播到它们各自的副本。
- 客户端缓存 将使用集群缓存上启用的相同过期时间。 但是,一旦与缓存同步,滑动过期将添加为绝对过期,因为如果值在集群缓存中滑动而不是在客户端缓存中滑动,则会导致不一致。