2011-09-18 8 views
7

में डेटा कैशिंग मुझे कुछ संदर्भ डेटा से कुछ ड्रॉपडाउन बॉक्सएक्स भरने की आवश्यकता है। यानी शहर सूची, देश सूची आदि। मुझे इसे विभिन्न वेबफॉर्म में भरना होगा। मुझे लगता है, हमें अपने आवेदन में इस डेटा को कैश करना चाहिए ताकि हम हर रूप में डेटाबेस को हिट न करें। मैं कैशिंग और एएसपी.Net के लिए नया हूँ। कृपया मुझे सुझाव दें कि यह कैसे करें।एएसपी.Net

उत्तर

13

मैं हमेशा अपनी सभी परियोजनाओं में निम्न श्रेणी जोड़ता हूं जो मुझे कैश ऑब्जेक्ट तक आसानी से पहुंच प्रदान करता है। इसे लागू करने के बाद, हसन खान के जवाब के बाद जाने का एक अच्छा तरीका होगा।

public static class CacheHelper 
    { 
     /// <summary> 
     /// Insert value into the cache using 
     /// appropriate name/value pairs 
     /// </summary> 
     /// <typeparam name="T">Type of cached item</typeparam> 
     /// <param name="o">Item to be cached</param> 
     /// <param name="key">Name of item</param> 
     public static void Add<T>(T o, string key, double Timeout) 
     { 
      HttpContext.Current.Cache.Insert(
       key, 
       o, 
       null, 
       DateTime.Now.AddMinutes(Timeout), 
       System.Web.Caching.Cache.NoSlidingExpiration); 
     } 

     /// <summary> 
     /// Remove item from cache 
     /// </summary> 
     /// <param name="key">Name of cached item</param> 
     public static void Clear(string key) 
     { 
      HttpContext.Current.Cache.Remove(key); 
     } 

     /// <summary> 
     /// Check for item in cache 
     /// </summary> 
     /// <param name="key">Name of cached item</param> 
     /// <returns></returns> 
     public static bool Exists(string key) 
     { 
      return HttpContext.Current.Cache[key] != null; 
     } 

     /// <summary> 
     /// Retrieve cached item 
     /// </summary> 
     /// <typeparam name="T">Type of cached item</typeparam> 
     /// <param name="key">Name of cached item</param> 
     /// <param name="value">Cached value. Default(T) if item doesn't exist.</param> 
     /// <returns>Cached item as type</returns> 
     public static bool Get<T>(string key, out T value) 
     { 
      try 
      { 
       if (!Exists(key)) 
       { 
        value = default(T); 
        return false; 
       } 

       value = (T)HttpContext.Current.Cache[key]; 
      } 
      catch 
      { 
       value = default(T); 
       return false; 
      } 

      return true; 
     } 
    } 
+0

अच्छा कोडिंग ... upvoted –

2

आपके दूसरे प्रश्न से मैंने पढ़ा है कि आप दाल, व्यापार और प्रेजेंटेशन परत के साथ 3 परत आर्किटेक्चर का उपयोग कर रहे हैं।

तो मुझे लगता है कि आपके पास कुछ डेटा एक्सेस क्लास है। करने के लिए आदर्श बात एक ही कक्षा के कैश किए गए कार्यान्वयन और उसमें कैशिंग करना होगा।

उदाहरण के लिए: आप एक इंटरफेस IUserRepository है तो UserRepository वर्ग इसे लागू और जोड़ना होगा/विधियों के माध्यम से DB में/अद्यतन प्रविष्टियों को हटा तो आप भी कर सकते हैं CachedUserRepository जो UserRepository वस्तु का उदाहरण में शामिल होंगे और पर तरीकों यह पहली बार दिखेगा मिल कुछ प्रमुख (विधि पैरामीटर से प्राप्त) के खिलाफ कैश में और यदि आइटम पाया जाता है तो यह यह वापस आ जाएगी अन्यथा आप आंतरिक वस्तु पर विधि कॉल; डेटा प्राप्त करें; कैश में जोड़ें और फिर इसे वापस करें।

आपके कैशड्यूसर रिपोजिटरी में स्पष्ट रूप से कैश ऑब्जेक्ट का उदाहरण भी होगा। कैश ऑब्जेक्ट का उपयोग करने के तरीके के विवरण के लिए आप http://msdn.microsoft.com/en-us/library/18c1wd61(v=vs.85).aspx देख सकते हैं।

+1

... और केवल सामान्य संस्कृति/शब्दावली के लिए, इसे "सजावट" पैटर्न कहा जाता है। यही है, आप प्रारंभिक भंडार को "अतिरिक्त सजावट" के साथ सजाते हैं जो कैशिंग लागू करता है। – tsimbalar