2011-09-15 11 views
9

में जेएसओएन डेटा कैशिंग मैं एक ऐसा एप्लीकेशन विकसित कर रहा हूं जो एक फेसबुक एप्लिकेशन पर कंपनी की ट्विटर फ़ीड प्रस्तुत करता हो। यह एक बड़ी कंपनी है जिसमें एफबी ऐप के बहुत सारे ट्रैफिक हैं, इसलिए मुझे ट्विटर ट्विटर (ट्विटर एपीआई से) कैश करने की ज़रूरत है ताकि मैं उनकी दर सीमा से बच सकूं।सी # एमवीसी 3

मेरे कोड में, मैं एपीआई को कॉल करने के लिए LinqToTwitter का उपयोग करता हूं और फिर मैं परिणाम के साथ JSON की एक स्ट्रिंग का निर्माण करता हूं। तब उस स्ट्रिंग को उपयोगकर्ता के ब्राउज़र को AJAX के माध्यम से खिलाया जाता है।

ट्विटर एपीआई कॉल के लिए दर सीमा 150 प्रति घंटे है, इसलिए मुझे लगता है कि मैं केवल कैश ऑब्जेक्ट में जेएसओएन डेटा की स्ट्रिंग रखूंगा और प्रति मिनट एक बार मुझे रीफ्रेश करूँगा जो मुझे ट्विटर दर सीमा से नीचे छोड़ देता है।

समस्या यह है कि मैं .NET के लिए एमवीसी के लिए बिल्कुल नया हूं और System.Web.Caching का उपयोग नहीं कर सकता जैसा कि मैं एक वेबफॉर्म एप्लिकेशन में कर सकता हूं।

  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 में यह पूरा करने के कर सकते हैं:

बड़े webforms ऐप्लिकेशन में मैं बस की तरह कुछ किया?

धन्यवाद!

मैट

उत्तर

17

ASP.NET MVC 3 में उपयोग HttpContext.Cache आप एक नियंत्रक कार्रवाई के परिणाम कैश करने के लिए चाहते हैं आप [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 
+0

@Darin, क्या यह सर्वर के बजाय ग्राहक को स्थान सेट के साथ काम करेगा? मेरा मतलब है, सर्वर के बजाय क्लाइंट पर जेसन परिणाम कैशिंग? – AdrianoRR

+0

डारिन, महान जवाब! मैं सिर्फ यह जानना चाहता हूं कि एक विशिष्ट नियंत्रक से कैश [आउटपुट कैश] को अमान्य करना संभव होगा या नहीं। – GibboK

1

अपने नियंत्रक

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]; 
}