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