@Hrvoje हूडो का जवाब बढ़ा ...
कोड:
using System;
using System.Runtime.Caching;
public class InMemoryCache : ICacheService
{
public TValue Get<TValue>(string cacheKey, int durationInMinutes, Func<TValue> getItemCallback) where TValue : class
{
TValue item = MemoryCache.Default.Get(cacheKey) as TValue;
if (item == null)
{
item = getItemCallback();
MemoryCache.Default.Add(cacheKey, item, DateTime.Now.AddMinutes(durationInMinutes));
}
return item;
}
public TValue Get<TValue, TId>(string cacheKeyFormat, TId id, int durationInMinutes, Func<TId, TValue> getItemCallback) where TValue : class
{
string cacheKey = string.Format(cacheKeyFormat, id);
TValue item = MemoryCache.Default.Get(cacheKey) as TValue;
if (item == null)
{
item = getItemCallback(id);
MemoryCache.Default.Add(cacheKey, item, DateTime.Now.AddMinutes(durationInMinutes));
}
return item;
}
}
interface ICacheService
{
TValue Get<TValue>(string cacheKey, Func<TValue> getItemCallback) where TValue : class;
TValue Get<TValue, TId>(string cacheKeyFormat, TId id, Func<TId, TValue> getItemCallback) where TValue : class;
}
उदाहरण
एकल आइटम कैशिंग (जब प्रत्येक आइटम को उसकी आईडी के आधार पर कैश किया जाता है क्योंकि आइटम प्रकार के लिए संपूर्ण कैटलॉग को कैशिंग करना बहुत गहन होगा)।
Product product = cache.Get("product_{0}", productId, 10, productData.getProductById);
किसी चीज की कैशिंग करना
IEnumerable<Categories> categories = cache.Get("categories", 20, categoryData.getCategories);
टीआईडी क्यों
दूसरा सहायक विशेष रूप से अच्छा है क्योंकि अधिकांश डेटा कुंजियाँ समग्र नहीं हैं। यदि आप समग्र कुंजियों का अक्सर उपयोग करते हैं तो अतिरिक्त विधियाँ जोड़ी जा सकती हैं। इस तरह आप कैश हेल्पर को पास करने के लिए कुंजी प्राप्त करने के लिए सभी प्रकार के स्ट्रिंग कॉन्फैक्शन या स्ट्रिंग करते हैं। यह डेटा एक्सेस विधि को पास करना भी आसान बना देता है क्योंकि आपको आईडी को रैपर विधि में पास नहीं करना पड़ता है ... उपयोग के अधिकांश मामलों के लिए पूरी बात बहुत ही जटिल और समरूप हो जाती है।