微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在C#MVC3中缓存JSON数据

我正在开发一个在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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐