appfabric缓存清除所有对象

时间:2011-06-20 14:14:59

标签: c# appfabric

是否有建议的方法来清除DataCache中的所有对象?

我可以使用DataCache.GetObjectsByAllTags方法,但这需要一个区域,我无法使用,因为我需要在多个缓存主机之间共享对象。

4 个答案:

答案 0 :(得分:7)

DataCache对象上没有简单的.Clear(),但使用以下内容将清除Appfabric主机上的缓存:

/ *假设DataCache是​​一个正确设置的Microsoft.ApplicationServer.Caching.Client.DataCache对象* /

public void Clear()
{
   Parallel.ForEach(DataCache.GetSystemRegions(), region =>
   {
      DataCache.ClearRegion(region);
      var sysRegion = DataCache.GetSystemRegionName(region);
      DataCache.ClearRegion(sysRegion);
   });
}

问题是,如果您在配置中设置了DataCacheLocalCacheProperties,您仍然会从本地副本中提取项目,直到超时或通知发生。我仍在寻找一种方法来立即使本地副本中的项目无效。

答案 1 :(得分:3)

答案 2 :(得分:0)

$hostname = 'server.lan'
$endpoints = New-Object -TypeName System.Collections.Generic.List[Microsoft.ApplicationServer.Caching.DataCacheServerEndpoint]
$endpoints.Add((New-Object -TypeName Microsoft.ApplicationServer.Caching.DataCacheServerEndpoint -ArgumentList $hostname, 22233))
$cache = ( New-Object -TypeName Microsoft.ApplicationServer.Caching.DataCacheFactory -ArgumentList ( New-Object -TypeName Microsoft.ApplicationServer.Caching.DataCacheFactoryConfiguration -Property @{ Servers = $endpoints } ) ).GetCache('Pricing')
$cache.GetSystemRegions() | %{ $cache.ClearRegion( $_ ) }

答案 3 :(得分:0)

这是刷新我使用的缓存的方法。为了验证缓存项是否已清除,我在命令shell中运行了get-cachestatistics。

public void Clear()
{
   Parallel.ForEach(DataCache.GetSystemRegions(), new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }, region =>
   {
      DataCache.ClearRegion(region);
   });
}