我有一个使用Entity Framework 4.3 / Sql Server的网站项目。
我的很多桌面都包含半静态数据 - 不经常更改的内容。
我的网站每天需要访问大约100次数据 - 有些数据更贵 - 例如我可能聚合一些大块数据,但在其他情况下数据非常清晰 - 例如查找表。 / p>
明显的缓存候选者是昂贵的聚合项目,但半静态查找表也可以缓存。在涉及大型项目时,我缺乏经验 - 我应该采取什么方法?
答案 0 :(得分:1)
建议缓存静态数据以从数据库中加载!
您可以通过多种方式缓存应用程序的数据。一种简单的方法是使用静态变量,但我建议在更简单的场景中使用像这样的应用程序状态:
Application["key"] = value;
object value = Application["key"];
要使缓存无效,您还可以在缓存中存储时间戳,并检查该时间戳是否过了5分钟(或1天或某事),然后从数据库重新加载数据。
或使用HttpRuntime Cache功能:
[System.ComponentModel.DataObject]
public class StaticCache
{
public static void LoadStaticCache()
{
// Get suppliers - cache using the data cache
SuppliersBLL suppliersBLL = new SuppliersBLL();
HttpRuntime.Cache.Insert(
/* key */ "key",
/* value */ suppliers,
/* dependencies */ null,
/* absoluteExpiration */ Cache.NoAbsoluteExpiration,
/* slidingExpiration */ Cache.NoSlidingExpiration,
/* priority */ CacheItemPriority.NotRemovable,
/* onRemoveCallback */ null);
}
[DataObjectMethodAttribute(DataObjectMethodType.Select, true)]
public static Northwind.SuppliersDataTable GetSuppliers()
{
return HttpRuntime.Cache["key"] as Northwind.SuppliersDataTable;
}
}
要在启动时加载数据,请在Global.asax中执行:
void Application_Start(object sender, EventArgs e)
{
StaticCache.LoadStaticCache();
}
我建议你阅读:http://www.asp.net/web-forms/tutorials/data-access/caching-data/caching-data-at-application-startup-cs了解更多信息。