过期和逐出(Windows Server AppFabric 缓存)

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

过期

缓存过期允许缓存群集自动将缓存对象从缓存中删除。当使用 PutAdd 方法时,可以为特定的缓存对象设置一个可选的对象超时值,该值将确定该对象在缓存中驻留的时间。如果在缓存对象时未提供对象超时值,则使用在命名缓存的群集配置设置中指定的值来确定该对象在缓存中的生存期。

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

为了防止在解锁过期对象时立即删除这些对象,Unlock 方法还支持延长缓存对象的过期时间。有关所支持的并发模型和方法的详细信息,请参阅并发模型(Windows Server AppFabric 缓存)并发方法(Windows Server AppFabric 缓存)

本地缓存失效

对于本地缓存,有两个互补类型的失效:基于超时的失效以及基于通知的失效。有关采用编程方式启用本地缓存的示例,请参阅启用 Windows Server AppFabric 本地缓存。有关使用应用程序配置文件启用本地缓存的示例,请参阅启用 Windows Server AppFabric 本地缓存 (XML)

Tip技巧
将对象存储在本地缓存中之后,无论这些对象是否被缓存群集上的另一个客户端更新,您的应用程序都将继续使用这些对象,直到这些对象失效。为此,对于很少更改的数据来说,最好使用本地缓存。

基于超时的失效

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

基于通知的失效

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

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

警告

若要使应用程序能够使用通知,您需要在命名的缓存上启用通知。对 New-CacheSet-CacheConfig 命令使用 NotificationsEnabled 参数。有关详细信息,请参阅使用 Windows PowerShell 管理 Windows Server AppFabric 缓存功能

逐出

为了保持每个缓存主机上可用于缓存的内存容量,AppFabric 支持最近最少使用 (LRU) 逐出。阈值称为水印,用于确保内存在群集中的所有缓存主机之间均匀地分布。

当缓存服务器上缓存服务的内存消耗超过低水印阈值时,AppFabric 开始逐出已过期的对象。

当内存消耗超过高水印阈值时,对象从内存中逐出(无论其是否过期),直到内存消耗回降到低水印。因此,可能会将缓存对象重新路由到其他主机,以保持最佳的内存分布。

指定过期和逐出设置

在群集配置设置中,在命名的缓存级别配置过期和逐出行为。可以使用基于 Windows PowerShell 的缓存管理工具来配置这些缓存级别的设置。有关详细信息,请参阅使用 Windows PowerShell 管理 Windows Server AppFabric 缓存功能

此外,还可以使用以下方法替代缓存中的默认设置:

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

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

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

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

另请参阅

概念

Windows Server AppFabric 缓存物理体系结构示意图
Windows Server AppFabric 缓存逻辑体系结构示意图
缓存客户端和本地缓存(Windows Server AppFabric 缓存)
启用 Windows Server AppFabric 本地缓存
启用 Windows Server AppFabric 本地缓存 (XML)
开发缓存客户端(Windows Server AppFabric 缓存)

  2011-12-05