Кэш приложений очищает все объекты

Есть ли предлагаемый метод для простого удаления всех объектов в DataCache?

Я мог бы использовать метод DataCache.GetObjectsByAllTags, но для этого потребовался регион, который я не могу использовать, так как мне нужно обмениваться объектами между несколькими узлами кеша.

Ответ 2

В объекте 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, вы все равно будете вытаскивать элементы из локальной реплики до тех пор, пока не произойдет тайм-аут или уведомление. Я все еще ищу способ немедленного аннулирования элементов в локальной реплике.

Ответ 3

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

Ответ 4

Это метод очистки кэша, который я использовал. Чтобы проверить, что элементы кэша были очищены, я запустил get-cachestatistics в командной оболочке.

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