استفاده از Redis برای Caching چطور است؟
استفاده از Redis بهعنوان یک Cache توزیعشده (Distributed Cache) خارج از پروسه برنامه، مشترک بین چند Instance/سرور.
چرا مهم است؟
برخلاف Memory Cache که هر Instance کش جدای خودش را دارد، Redis یک نقطه مرکزی است که همه Instanceهای برنامه از یک کش مشترک استفاده میکنند — ضروری برای مقیاسپذیری افقی.
تعریف
Redis یک دیتابیس Key-Value درونحافظهای (In-Memory) است که علاوه بر ذخیرهسازی سریع، معمولاً بهعنوان لایه Distributed Cache جلوی دیتابیس اصلی قرار میگیرد.
مثال (داتنت — IDistributedCache)
builder.Services.AddStackExchangeRedisCache(options =>
options.Configuration = "localhost:6379");
var cached = await _cache.GetStringAsync("categories");
if (cached is null)
{
var categories = await _repository.GetCategoriesAsync();
await _cache.SetStringAsync("categories", JsonSerializer.Serialize(categories),
new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10) });
return categories;
}
return JsonSerializer.Deserialize<List<Category>>(cached)!;
الگوی Cache-Aside
رایجترین الگو: اول از Cache بخوان؛ اگر نبود، از دیتابیس بخوان و در Cache بنویس؛ برای Update، رکورد دیتابیس را بهروز کن و همان Key را از Cache حذف کن (Invalidate)، نه اینکه فراموشش کنی.
اشتباه رایج
❌ فراموشکردن Invalidate کردن Cache بعد از Update داده در دیتابیس — کاربر داده قدیمی (Stale) را تا زمان انقضای طبیعی Cache میبیند؛ هر مسیر Write باید Key مرتبط در Cache را هم پاک یا بهروز کند.
منبع و مطالعه بیشتر
خلاصه
Redis بهعنوان Distributed Cache بین چند Instance برنامه مشترک است، برخلاف Memory Cache محلی. با الگوی Cache-Aside کار کنید و همیشه بعد از Update داده، Cache مرتبط را Invalidate کنید. مرجع کامل: Distributed caching در ASP.NET Core، Microsoft Learn.
