我正在开发一个在Facebook应用程序中呈现公司的Twitter资讯的应用程序.这是一个大型公司,拥有大量流量到FB应用程序,所以我需要缓存我收到的Twitter数据(从twitter API),以便我可以避免他们的速率限制.
在我的代码中,我使用LinqToTwitter来调用API,然后我用结果构造一个JSON字符串.然后,该字符串通过AJAX进入用户的浏览器.
Twitter API调用的速率限制是每小时150个,所以我想我将把我建立的JSON数据字符串放在一个缓存对象中,并且每分钟刷新一次,这使我远远低于Twitter速率限制.
问题是我对于MVC .NET来说相当新鲜,似乎没有像在Webforms应用程序中那样使用System.Web.Caching.
在旧的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中完成这个?
谢谢!
马特
解决方法
在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