我应该缓存数据库数据吗?

时间:2014-04-28 08:03:18

标签: asp.net sql entity-framework caching

我有一个使用Entity Framework 4.3 / Sql Server的网站项目。

我的很多桌面都包含半静态数据 - 不经常更改的内容。

我的网站每天需要访问大约100次数据 - 有些数据更贵 - 例如我可能聚合一些大块数据,但在其他情况下数据非常清晰 - 例如查找表。 / p>

明显的缓存候选者是昂贵的聚合项目,但半静态查找表也可以缓存。在涉及大型项目时,我缺乏经验 - 我应该采取什么方法?

1 个答案:

答案 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了解更多信息。