ASP.NET以编程方式清除在不同服务器上运行的应用程序缓存

时间:2014-08-27 19:13:23

标签: asp.net caching

我正在尝试以编程方式从其他服务器清除应用程序的缓存。我在应用程序中看到很多关于清除它的帖子,但不是这样的。 如果您触摸Web.Config文件,它将回收应用程序池,导致应用程序清除。假设主机应用程序具有访问权限,我可以通过编程方式执行此操作。但是想知道是否有更好的方法来清除所有缓存项而不是重新启动应用程序池。

1 个答案:

答案 0 :(得分:0)

我想说清除WHOLE缓存时需要考虑几点:

  1. 如果要在Cache中存储内容,您希望有某种同步方法。在这种情况下,删除所有东西可能会导致一些问题(锁定,性能缓慢,竞争条件)。
  2. 据我所知,从外部AppDomain访问应用程序的缓存是不可能的(其中一些主要原因我确定是同步和安全问题)。
  3. 话虽如此,如果你想清除缓存中的每个条目(假设你使用System.Web.Caching方法这样做),你可以引入一些类似的代码:

    List<string> keys = new List<string>();
    
    IDictionaryEnumerator enumerator = Cache.GetEnumerator();
    
    while (enumerator.MoveNext()){
        keys.Add(enumerator.Key.ToString());
    } // end while
    for (int i = 0; i < keys.Count; i++) {
        Cache.Remove(keys[i]);
    }  // end for loop
    

    然后,您可以通过网址公开上述代码(例如:http://example.com/admin/refresh-cache)。

    这将允许您以编程方式从其他应用程序或批处理文件中清除缓存,或者您可以直接从URL访问它。

    要详细说明上面的第一个项目符号,.NET缓存机制(其中有很多种类:http://msdn.microsoft.com/en-us/library/dd997357(v=vs.110).aspx)都有自己的内置过期功能。如果您发现自己处于要清除整个缓存的位置,则可能表明您应该A)提高缓存保留值或B)回收应用程序池,因为这将确保应用程序用户更安全的转换。请记住,当应用程序运行时,任何在缓存中放置项目的内容在您清除所有内容时可能仍会尝试执行此操作


    另一个需要考虑的选择是使用缓存管理解决方案,例如AppFabric(http://msdn.microsoft.com/en-us/library/ff383731(v=azure.10).aspx)。

相关问题