过期疑难解答(Windows Server AppFabric 缓存)

Windows Server AppFabric 使用过期来控制缓存中对象的生存期。 过期自身是 AppFabric 缓存体系结构的一个普通部分,但您可能必须解决与过期设置有关的问题。 有关过期的详细信息,请参阅过期和逐出

诊断过期问题

向缓存中添加对象时,缓存使用的内存达到内存低水印。 使用 Get-CacheHostConfig Windows PowerShell 命令可以看到 CacheSizeLowWatermark 设置。 通过观察性能监视器中的 AppFabric Caching:Host | Total Data Size Bytes 计数器,您可以查看在缓存主机上当前使用的内存数量。 达到内存低水印之后,缓存群集会定期删除缓存中的过期项目。 达到内存高水印时,缓存群集除了逐出最近最少使用的项目之外,也会删除缓存中的过期对象。

仅通过使用诸如性能监视器之类的工具观察缓存的行为,很难确定过期设置的具体问题。 最好查看每个缓存的默认过期设置,以确定过期设置是否适合于缓存中的数据类型。 有两个主要的注意事项:

  • 过期时间太短? 在这种情况下,应用程序可能会遇到多个缓存缺失,需要向缓存中重新添加项目。

  • 过期时间太长? 如果缓存群集具有较高的插入量或者过期时间非常长,则在缓存项目过期之前可能已达到内存高水印。 这会导致逐出运行。 有关逐出的详细信息,请参阅逐出疑难解答(Windows Server AppFabric 缓存

以下 Windows PowerShell 脚本显示每个缓存、其过期设置以及默认的过期时间(以分钟为单位)。

$caches = Get-Cache -MaxRegions 0
foreach($cache in $caches) { Write-Host $cache.CacheName (Get-CacheConfig $cache.CacheName).IsExpirable (Get-CacheConfig $cache.CacheName).TimeToLive }

考虑来自以上脚本的下列示例输出。

Cache1 True 10
Cache2 True 10
Cache3 True 1
Cache4 False 10
default True 10

在以上示例输出中,您可以看到大多数缓存都使用默认设置: 启用过期并且过期时间为 10 分钟。Cache3 以启用过期,但过期时间为 1 分钟。 您应该检查 Cache3 的客户端,以查看对于这些客户端 1 分钟是否足以获得缓存项目的优势。Cach4 已禁用过期,因此不会应用 10 分钟的值。 您应该检查 Cache4 的客户端,以查看是否有正当理由在此缓存上禁用过期。 您还应该检查 Cache4 的大小,以查看它是否包含可能会达到缓存主机上的内存高水印的大量数据。

Important要点
即使这些缓存设置都显示默认值,但应用程序可以在它们添加的各个项目上控制过期。 如果应用程序为某个项目指定超时值,则该超时值会替代缓存设置。 而且,如果应用程序锁定缓存中的某个项目,即使该项目已过期,该项目也仍然会位于缓存中。

解决过期问题

确定应该更改过期设置之后,您可以使用 Set-CacheConfig Windows PowerShell 命令来更改过期设置。 以下命令更改 Cache1 的过期设置,以启用过期时间为 5 分钟的过期。

Set-CacheConfig Cache1 -Expirable true -TimeToLive 5

如果过期设置由某个应用程序控制,则开发人员必须更改该应用程序,以调整过期时间或缓存项目的锁定状态。

另请参阅

概念

解决服务器问题(Windows Server AppFabric 缓存)

  2011-12-05