代码之家  ›  专栏  ›  技术社区  ›  Germstorm Pierre-Alain Vigeant

ASP.Net缓存共享

  •  5
  • Germstorm Pierre-Alain Vigeant  · 技术社区  · 14 年前

    • 用户1访问网页,缓存为空,加载/计算数据,缓存数据
    • 用户3访问网页,缓存包含数据,数据从缓存加载
    • 用户1重新加载网页,缓存包含数据,数据从缓存加载
    • 缓存过期
    • 用户3刷新网页,缓存为空,加载/计算数据,缓存数据

    我知道ASP.Net有一个内置的缓存机制。我不知道的是,它是否可以在不同的用户之间共享访问不同的计算机上的网站在同一时间。 我还想知道系统在web场环境中的行为。

    3 回复  |  直到 14 年前
        1
  •  9
  •   eduncan911    14 年前

    虽然其他人提到了内置的ASP.NET缓存(System.Web.Caching),但请注意,.NET 4.0引入了一个全新的缓存框架,该框架设计用于System.Web.Caching命名空间之外的工作:

    http://msdn.microsoft.com/en-us/library/system.runtime.caching(VS.100).aspx

    现在,这比简单的System.Web.Caching的缓存项更像野兽。但是,拥有多个缓存存储区、锁定缓存对象/密钥以及创建自己的外部缓存提供程序(如Microsoft的新产品)的扩展点的优势 Velocity distributed caching system

    其实没那么难用。直接从MSDN在WinForms应用程序中使用内置MemoryCache提供程序(同样,您可以实现自己的)的文章(您可以更改web应用程序的代码):

    http://msdn.microsoft.com/en-us/library/system.runtime.caching.memorycache.aspx

    ObjectCache cache = MemoryCache.Default;
    string fileContents = cache["filecontents"] as string;
    
    if (fileContents == null)
    {
        CacheItemPolicy policy = new CacheItemPolicy();
    
        List<string> filePaths = new List<string>();
        filePaths.Add("c:\\cache\\example.txt");
    
        policy.ChangeMonitors.Add(new 
        HostFileChangeMonitor(filePaths));
    
        // Fetch the file contents.
        fileContents = 
            File.ReadAllText("c:\\cache\\example.txt");
    
        cache.Set("filecontents", fileContents, policy);
    }
    
    Label1.Text = fileContents;
    

    我已经实现了NCache(如上所述),以及Memcached。我可以告诉你,微软的Velocity确实是对数据进行分区并在缓存分区本身中设置冗余的方法(非常酷)。更不用说,它是免费的!

        2
  •  3
  •   M4N    14 年前

    如果您真的想(或需要)为多台机器(web场)拥有一个公共缓存,那么您需要一些分布式缓存解决方案,例如。 AppFabric NCache

        3
  •  2
  •   Eric Petroelje    14 年前

    是的,内置的ASP.NET缓存在应用程序中的所有用户(线程)之间共享。