簡體   English   中英

在C#MVC3中緩存JSON數據

[英]Caching JSON Data in C# MVC3

我正在開發一個應用程序,在Facebook應用程序上顯示公司的Twitter提要。 這是一家擁有大量FB流量的公司,所以我需要緩存我收到的Twitter數據(來自twitter API),以便我可以避免他們的速率限制。

在我的代碼中,我使用LinqToTwitter來調用API,然后使用結果構造一個JSON字符串。 然后通過AJAX將該字符串提供給用戶的瀏覽器。

Twitter API調用的速率限制是每小時150,所以我想我將把我構建的JSON數據字符串放在緩存對象中,每分鍾只刷新一次,使我遠低於Twitter速率限制。

問題是我對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中實現這一目標嗎?

謝謝!

馬特

在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

在控制器中使用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];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM