.net - ASP.Net 缓存共享

标签 .net asp.net caching

我有一个 ASP.Net 4.0 Web 应用程序,它非常频繁地从数据库加载数据并对其进行大量计算。我想将这些加载和准备好的数据缓存在中央缓存中,每个使用该应用程序的用户和计算机都可以访问该缓存。

简单用例:

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

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

    最佳答案

    虽然其他人提到了内置的 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 的 Cache 项更像野兽。但是,您可以获得拥有多个缓存存储、缓存对象/键的锁定以及创建自己的外部缓存提供程序的扩展点的优势——例如 Microsoft 新 Velocity distributed caching system 的一个。 .它带有内置的 MemoryCache 提供程序。

    使用起来真的没有那么难。直接来自 MSDN 关于内置 MemoryCache 提供程序的文章(同样,您可以实现自己的)在 WinForms 应用程序中使用它(您将更改 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。我可以告诉您,Microsoft 的 Velocity 确实是对数据进行分区并在缓存分区本身内设置冗余的方法(非常酷)。更不用说,它是免费的!

    关于.net - ASP.Net 缓存共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3300872/

    相关文章:

    .net - HttpContext.Current.Cache - 什么时候会自动清除?

    javascript - 有没有办法对 AngularJS JSON 请求($http/$resource)使用浏览器缓存?

    Android Flickr Json 缓存图像

    c# - 如何使用 Linq 查询和 IEnumerable 获取类属性的值

    当字符串从服务器返回时,jQuery 表单插件的文件上传问题

    .net - 错误 23 不是 .resx 文件上的有效 Win32 应用程序

    c# - 静态方法的含义

    c# - 在不使用查询字符串的情况下在 ASP.NET MVC 应用程序中移动时如何保持 Sharepoint 上下文?

    c# - Win10 UWP 自定义视频效果,IBasicVideoEffect

    c# - IoC 统一 : registering an Entity Framework ObjectContext for Dependency Injection