【问题标题】:Should I cache database data?我应该缓存数据库数据吗?
【发布时间】:2014-04-28 08:03:17
【问题描述】:

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

我的很多表都包含半静态数据 - 不经常更改的数据。

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

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

【问题讨论】:

    标签: asp.net sql entity-framework caching


    【解决方案1】:

    建议缓存静态数据以减轻数据库的负载!

    您可以通过多种方式缓存应用程序的数据。一种简单的方法是使用静态变量,但我建议在更简单的场景中使用这样的应用程序状态:

    Application["key"] = value;
    object value = Application["key"];
    

    要使缓存失效,您也可以在缓存中存储一​​个时间戳,并检查是否经过了 5 分钟(或 1 天或其他时间),然后从数据库中重新加载数据。

    或使用 HttpRuntime 缓存功能:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多