是否有建议的方法来清除DataCache中的所有对象?
我可以使用DataCache.GetObjectsByAllTags方法,但这需要一个区域,我无法使用,因为我需要在多个缓存主机之间共享对象。
答案 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);
});
}