appfabric缓存清除所有对象
本文关键字:对象 清除 缓存 appfabric | 更新日期: 2023-09-27 17:59:31
是否有建议的方法只清除DataCache中的所有对象?
我可以使用DataCache.GetObjectsByAllTags方法,但这需要一个区域,我不能使用它,因为我需要在多个缓存主机之间共享对象。
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);
});
}