@ হারভোজে হুডোর উত্তর বাড়ানো হচ্ছে ...
কোড:
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);
টিআইডি কেন?
দ্বিতীয় সহায়কটি বিশেষত দুর্দান্ত কারণ বেশিরভাগ ডেটা কীগুলি যৌগিক নয়। আপনি প্রায়শই সম্মিলিত কী ব্যবহার করলে অতিরিক্ত পদ্ধতি যুক্ত করা যেতে পারে। এভাবে আপনি সমস্ত ধরণের স্ট্রিং কনকেন্টেশন বা স্ট্রিং করা এড়াতে পারেন the এটি ডেটা অ্যাক্সেসের পদ্ধতিটি পাস করা আরও সহজ করে তোলে কারণ আপনাকে মোড়কের পদ্ধতিতে আইডিটি পাস করতে হবে না ... বেশিরভাগ ব্যবহারের ক্ষেত্রে পুরো জিনিসটি খুব সংক্ষিপ্ত এবং সংবেদনশীল হয়ে ওঠে।