我正在开发一个应用程序,它在Facebook应用程序上显示公司的Twitter提要。这是一家拥有大量流量的FB公司,所以我需要缓存我收到的Twitter数据(来自twitter API),以便我可以避免他们的速率限制。
在我的代码中,我使用LinqToTwitter来调用API,然后使用结果构造一个JSON字符串。然后通过AJAX将该字符串提供给用户的浏览器。
Twitter API调用的速率限制是每小时150,所以我想我只是将我构建的JSON数据字符串放在缓存对象中,并且每分钟只刷新一次,这使我远低于Twitter速率限制。 / p>
问题是我对MVC for .NET相当新,似乎无法使用System.Web.Caching,就像我在webforms应用程序中所做的那样。
在较旧的webforms应用中,我只做了类似的事情:
private string KeyTwitterData;
...
string data = null;
if (Cache[KeyTwitterData] == null)
{
var url = LinqToTwitter.Request.Url;
data = ServiceMethods.GetConversation(url);
Cache.Insert(KeyTwitterData, data);
}
else
{
data = (string)Cache[KeyTwitterData];
}
有人可以告诉我如何在MVC3中完成此任务吗?
谢谢!
马特
答案 0 :(得分:17)
在ASP.NET MVC 3中,如果要缓存控制器操作的结果,可以使用[OutputCache]
属性来装饰它:
[OutputCache(Duration = 3600, Location = OutputCacheLocation.Server, VaryByParam = "none")]
public ActionResult Foo()
{
var model = SomeExpensiveOperationToFetchData();
return View(model);
}
如果您不想缓存控制器操作的整个输出,可以使用MemoryCache类:
var data = MemoryCache.Default[KeyTwitterData];
if (data == null)
{
data = SomeExpensiveOperationToFetchData();
MemoryCache.Default.Add(KeyTwitterData, data, DateTime.Now.AddMinutes(5));
}
// use the data variable here
答案 1 :(得分:1)
在控制器中使用HttpContext.Cache
string data = null;
if (HttpContext.Cache[KeyTwitterData] == null)
{
var url = LinqToTwitter.Request.Url;
data = ServiceMethods.GetConversation(url);
HttpContext.Cache.Insert(KeyTwitterData, data);
}
else
{
data = (string)HttpContext.Cache[KeyTwitterData];
}