【问题标题】:How to hold current date in cache, yet not compromise efficiency - asp.net如何在缓存中保存当前日期,但不影响效率 - asp.net
【发布时间】:2010-07-28 23:30:19
【问题描述】:

我正在使用 asp.net (c#) 和 lingtosql 构建一个 Web 应用程序。 当我对我的数据库执行更新操作时,我会更新我的类。 我使用gridview来绑定更新信息。 当我仅在数据库上中继时,页面需要很长时间才能加载。 当我仅在缓存上中继时,我有旧数据。 对于异步缓存更新,我有什么解决方法,但不会因无休止的请求而使数据库过载(我只想在数据库本身发生更改时更新缓存,并异步执行更新操作)。

非常感谢,

【问题讨论】:

    标签: asp.net caching


    【解决方案1】:

    如果缓存在特定时间(例如 30 分钟)处于非活动状态,您可能会刷新数据库中的数据。

    Cache.Insert("CachedData", dt, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(30));
    

    或者您可以每隔一定次数刷新缓存中的数据。检查Cache Object

    否则,如果您需要诸如缓存之类的东西,则仅当您可能要检查 SqlCacheDependency Object 的任何更新时才会从数据库中刷新其数据。

    【讨论】:

      【解决方案2】:

      给定一个 GridView:

       <asp:GridView ID="gv" runat="server">
      

      在调用gv.DataBind() 的方法中,连接到从缓存中填充的数据集。

      System.Web.Caching.Cache cache = HttpContext.Current.Cache;
      System.Data.DataSet gvDataSet = cache.Get("gvDataSet") as System.Data.DataSet;
      if (gvDataSet == null)
      {
              gvDataSet = GetDataSetFromDatabase();
              cache.Insert("gvDataSet",
                            gvDataSet, 
                            null, 
                            System.Web.Caching.Cache.NoAbsoluteExpiration,  
                            TimeSpan.FromMinutes(120), 
                             System.Web.Caching.CacheItemPriority.Default,
                             null);
      }
      gv.DataSource = gvDataSet;
      gv.DataBind();
      

      在更新数据集的代码中,清除缓存。

       cache.Remove("gvDataSet");
      

      如果更新 DataSet 的代码在 Web 服务器的外部,则编写一个 HTTP 处理程序(通用处理程序),其中包含清除缓存的代码并从外部代码调用处理程序。

      【讨论】:

        猜你喜欢
        • 2014-02-16
        • 1970-01-01
        • 2022-08-07
        • 1970-01-01
        • 1970-01-01
        • 2011-07-25
        • 2013-09-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多