导出 (0) 打印
全部展开

过期和逐出(Azure 缓存的角色中缓存)

更新时间: 2014年9月

note备注
有关为你的应用程序选择合适的 Azure 缓存产品/服务的指导,请参阅 哪种 Azure Cache 产品/服务适合我?

Microsoft Azure Cache 不会在内存中永久保留缓存对象。除了通过使用 Remove 方法从缓存中被显式删除之外,缓存对象也可能过期或被缓存群集逐出。

缓存过期允许缓存群集自动将缓存对象从缓存中删除。当使用 PutAdd 方法时,可以为特定的缓存对象设置一个可选的对象超时值,该值将确定此对象在缓存中驻留的时间。如果缓存对象时未提供对象超时值,则缓存对象将使用默认过期时间。此默认值取决于你是使用 缓存 角色上的 还是使用 Shared Caching。

当使用基于角色的 缓存 时,将有三个针对过期的选项可供选择:

 

有效期限类型 说明

过期已禁用。项目将保留在缓存中,直到被逐出或缓存群集重新启动。

绝对

项目在创建后的指定时间内过期。

滑动

项目在上次访问后的指定时间内过期。每次访问对象时,将重置滑动时间窗口。这会延长经常使用的项目在缓存中的保留时间。

note备注
请务必注意滑动过期在与本地缓存结合使用时的行为。如果项目是从本地缓存中读取的,则不会访问缓存群集上的对象。因此,即使在本地读取项目,该项目也会在服务器上过期。

在 Shared Caching 中,过期始终是绝对的,没有任何方法可设置默认过期时间。Shared Caching 中的项目在 48 小时后过期。但是,可以使用 PutAdd 方法在代码中设置显式过期时间。请注意,ASP.NET 提供程序将自动使用这些重载为会话状态和输出缓存提供明确的超时。不管属于哪种情况,当缓存大小超出Shared Caching产品的限制时,将逐出缓存中最近最少使用的项目。

当出于并发的目的锁定缓存对象时,即使这些对象的过期时间已过,也不会从缓存中删除这些对象。一旦解锁这些对象,会立即将其从缓存中删除(如果其过期时间已过)。

为了防止在解锁过期对象时立即删除这些对象,Unlock 方法还支持延长缓存对象的过期时间。

对于本地缓存,有两个互补类型的失效:基于超时的失效以及基于通知的失效。

Tip提示
将对象存储在本地缓存中之后,无论这些对象是否被缓存群集上的其他客户端更新,你的应用程序都可以使用这些对象,直到这些对象失效。因此,最好为很少更改的数据启用本地缓存。

将对象下载到本地缓存之后,这些对象将驻留在本地缓存中,直到其达到缓存客户端配置设置中指定的对象超时值。达到此超时值之后,对象将失效,以便下次请求时可以从缓存群集刷新。

如果缓存客户端启用了本地缓存,则还可以使用缓存通知使本地缓存的对象自动失效。根据需要缩短这些对象的生存期,这样可以降低应用程序使用过时数据的可能性。

note备注
Shared Caching不支持通知。

使用缓存通知时,应用程序会定期向缓存群集查询,以了解是否有任何新的通知可用。此间隔称为轮询间隔,默认情况下为每 300 秒。在应用程序配置设置中,轮询间隔是以秒为单位指定的。注意,即使对于基于通知的失效,超时也仍然适用于本地缓存中的项目。这使得基于通知的失效成为基于超时的失效的补充。

有关详细信息和示例,请参阅本地缓存(Azure 缓存的角色中缓存)

为了保持每个缓存主机上可用于 Caching 的内存容量,支持最近最少使用 (LRU) 逐出。阈值用于确保内存在群集中的所有缓存主机之间均匀地分布。此阈值由两个因素决定:每台计算机上的可用物理内存量和每台计算机上保留的缓存内存百分比。

当内存使用量超过内存阈值时,从内存逐出这些对象,无论它们是否过期,直到缓解内存压力。因此,可能会将缓存对象重新路由到缓存群集中的其他计算机,以保持最佳的内存分布。

Warning警告
如果禁用逐出,则存在限制风险。在此情况下,内存已超出阈值,但却无法缓减内存不足的问题。在问题解决之前,客户端在尝试将项目添加到此状态下的缓存时会收到一个异常。请注意,Shared Caching 不支持对缓存禁用逐出。

在群集配置设置中,在命名的缓存级别配置过期和逐出行为。

可以使用以下方法覆盖缓存中的默认设置:

  • AddPut 方法提供允许你仅为添加到缓存的对象指定过期超时值的重载。

  • PutAndUnlockUnlock 方法提供允许你在解锁对象之后延长对象过期时间的重载。

  • ResetObjectTimeout 方法允许你显式延长对象的生存期,从而替代缓存的过期设置。

无论是过期设置还是逐出设置,如果重新启动缓存群集,则会清除缓存中的所有对象。如果未在缓存中找到任何数据,则应用程序代码必须从数据源重新加载缓存。这通常称为缓存端编程模式。

另请参阅

显示:
© 2015 Microsoft