2009-07-15 84 views
2

我有一个应用程序,从凌晨3点,每天早上在内容直到那时方面 没有什么变化第三方下载数据...ASP.Net缓存

是有可能缓存“产品信息”到那时为止? 或者这是我应该在global.asax中设置的东西?

回答

2

是的,你可以将它缓存到那时。有很多方法可以做到这一点。

如果你有一个服务器端调用来检索数据,那么当你第一次得到它并将到期时间设置为第二天凌晨3点时,我会简单地将这些数据添加到缓存中。然后在每个页面调用中检查此数据对象的缓存,如果它返回null,则启动另一次数据提取。

你也可以使用页面输出缓存,但是这并没有给你这样的详细控制。

是这样的:

if (HttpContext.Current.Cache["MyData"] != null) 
    return HttpContext.Current.Cache["MyData"] as DataObjectClass 

//Get data into dataobject 

HttpContext.Current.Cache.Add(
        "MyData", 
        DataObject, 
        DateTime (tomorrow 3am), // psuedo 
        null, 
        TimeSpan.Zero, 
        System.Web.Caching.CacheItemPriority.Normal, 
        null); 

return DataObject; 
+0

doh!我讨厌成为一个缓慢的typer :(这就是我将要做的:) – 2009-07-15 11:19:20

1

您可以设置它是网页本身。在该页面的代码中:

Response.Cache.SetExpires("put tomorrow's date @ 3AM here"); 
Response.Cache.SetCacheability(HttpCacheability.Public); 
2

另一种选择是使用的System.Web.Caching.Cache类。每次加载数据时,都可以将其缓存在此处,然后根据需要进行检索。这个类允许TimeSpan过期,但是由于您每天在特定时间下载数据并不重要。

using System.Web.Caching; 
Public Class SomeClass 
{ 
    Public SomeDataCollection GetCachedData() 
    { 
     if(Cache["Key"] == null) //You want to always be sure to check if set 
     Cache["Key"] = GetDataCollectionFromSomewhere(); 

     return Cache["Key"]; 
    } 
} 
0

我会坚持每24小时的第三方数据。缓存它取决于数据是什么。它是需要进一步处理的文件吗?然后处理它并将其缓存在内存中。你的故障转移是这样的:内存缓存,临时持久位置,第三方位置。