Ответ 1
Прочтите этот ответ: В ASP.NET AppFabric Cache отсутствуют методы Flush/Clear и Count/GetCount?
Есть ли предлагаемый метод для простого удаления всех объектов в DataCache?
Я мог бы использовать метод DataCache.GetObjectsByAllTags, но для этого потребовался регион, который я не могу использовать, так как мне нужно обмениваться объектами между несколькими узлами кеша.
Прочтите этот ответ: В ASP.NET AppFabric Cache отсутствуют методы Flush/Clear и Count/GetCount?
В объекте 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, вы все равно будете вытаскивать элементы из локальной реплики до тех пор, пока не произойдет тайм-аут или уведомление. Я все еще ищу способ немедленного аннулирования элементов в локальной реплике.
$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( $_ ) }
Это метод очистки кэша, который я использовал. Чтобы проверить, что элементы кэша были очищены, я запустил get-cachestatistics в командной оболочке.
public void Clear()
{
Parallel.ForEach(DataCache.GetSystemRegions(), new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }, region =>
{
DataCache.ClearRegion(region);
});
}