加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在C#MVC3中缓存JSON数据

发布时间:2020-12-16 05:39:24 所属栏目:百科 来源:网络整理
导读:我正在开发一个在Facebook应用程序中呈现公司的Twitter资讯的应用程序.这是一个大型公司,拥有大量流量到FB应用程序,所以我需要缓存我收到的Twitter数据(从twitter API),以便我可以避免他们的速率限制. 在我的代码中,我使用LinqToTwitter来调用API,然后我用结
我正在开发一个在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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读