appfabric缓存清除所有对象

本文关键字:对象 清除 缓存 appfabric | 更新日期: 2023-09-27 17:59:31

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

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

appfabric缓存清除所有对象

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,则在发生超时或通知之前,您仍将从本地副本中提取项目。我仍在寻找一种立即使本地副本中的项目无效的方法。

读一读这个答案:ASP.Net AppFabric缓存缺少Flush/Clear和Count/GetCount方法?

$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( $_ ) }

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

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