ASP.NET中的缓存看起来像使用某种关联数组:
// Insert some data into the cache:
Cache.Insert("TestCache", someValue);
// Retrieve the data like normal:
someValue = Cache.Get("TestCache");
// But, can be done associatively ...
someValue = Cache["TestCache"];
// Also, null checks can be performed to see if cache exists yet:
if(Cache["TestCache"] == null) {
Cache.Insert(PerformComplicatedFunctionThatNeedsCaching());
}
someValue = Cache["TestCache"];
如您所见,对缓存对象执行空检查非常有用。
但是我想实现一个可以清除缓存值的缓存清除功能 我不知道整个键名。因为似乎有联想 数组在这里,它应该是可能的(?)
任何人都可以帮我找到一种循环存储缓存键的方法 对它们执行简单的逻辑?这就是我追求的目标:
static void DeleteMatchingCacheKey(string keyName) {
// This foreach implementation doesn't work by the way ...
foreach(Cache as c) {
if(c.Key.Contains(keyName)) {
Cache.Remove(c);
}
}
}
答案 0 :(得分:5)
从任何集合类型中删除项目时不要使用foreach循环 - foreach循环依赖于使用枚举器,该枚举器不允许您从集合中删除项目(如果集合正在迭代,则枚举器将抛出异常over已添加或删除项目。)
使用简单的while循环缓存键:
int i = 0;
while (i < Cache.Keys.Length){
if (Cache.Keys(i).Contains(keyName){
Cache.Remove(Cache.Keys(i))
}
else{
i ++;
}
}
答案 1 :(得分:0)
在.net核心中执行此操作的另一种方法:
var keys = _cache.Get<List<string>>(keyName);
foreach (var key in keys)
{
_cache.Remove(key);
}