Memory Cache در داتنت چیست؟
نگهداری موقت داده پرکاربرد مستقیم در حافظه (RAM) همان پروسه برنامه، برای جلوگیری از محاسبه یا Query تکراری و پرهزینه.
چرا مهم است؟
برای دادهای که بهندرت تغییر میکند اما زیاد خوانده میشود (مثل لیست دستهبندی محصولات)، خواندن مکرر از دیتابیس اتلاف منابع است؛ Memory Cache همان داده را در حافظه محلی نگه میدارد.
تعریف
IMemoryCache در ASP.NET Core داده را بهصورت Key-Value مستقیم در حافظه پروسه برنامه نگه میدارد — سریعترین نوع Cache چون نیازی به رفتوبرگشت شبکه ندارد، اما بین چند Instance/سرور مشترک نیست.
مثال
public async Task<List<Category>> GetCategoriesAsync()
{
if (_cache.TryGetValue("categories", out List<Category>? cached))
return cached!;
var categories = await _context.Categories.AsNoTracking().ToListAsync();
_cache.Set("categories", categories, TimeSpan.FromMinutes(10));
return categories;
}
نکات مهم
- زمان انقضا (Expiration) همیشه بگذارید — Cache بدون انقضا یعنی داده قدیمی برای همیشه میماند.
- چون در حافظه محلی پروسه است، اگر برنامه چند Instance دارد، هر Instance کش جدای خودش را دارد (ناسازگار با نیاز به کش مشترک — آنجا Redis مناسبتر است).
اشتباه رایج
❌ کشکردن دادهای که بهازای هر کاربر فرق میکند (مثل سبد خرید شخصی) با یک Key ثابت مشترک — این کار باعث میشود داده یک کاربر برای کاربر دیگر نمایش داده شود؛ Key کش باید شامل شناسه کاربر یا Context مناسب باشد.
منبع و مطالعه بیشتر
خلاصه
Memory Cache داده را مستقیم در حافظه پروسه برنامه نگه میدارد، سریع اما بین چند Instance مشترک نیست. همیشه زمان انقضا بگذارید و Key کش را برای داده کاربر-محور شامل شناسه کاربر کنید. مرجع کامل: Cache in-memory در ASP.NET Core، Microsoft Learn.
