Redis یک مخزن داده با عملکرد بالا و کلید-مقدار در حافظه است که اغلب برای ذخیرهسازی موقت (caching)، مدیریت جلسه (session) و پیامرسانی بلادرنگ (real-time messaging) استفاده میشود. در برنامههای ASP.NET Core، Redis نقش حیاتی در بهبود مقیاسپذیری، سرعت و قابلیت اطمینان ایفا میکند.

- ذخیره سازی در حافظه: Redis دادهها را در RAM نگه میدارد و خواندن و نوشتن را بسیار سریع میکند.
- پایگاه داده کلید-مقدار: دادهها را به صورت جفتهای کلید-مقدار ذخیره میکند و از رشتهها، هشها، لیستها، مجموعهها و موارد دیگر پشتیبانی میکند.
- متنباز: سبک و به طور گسترده در بین پلتفرمها پذیرفته شده است.
- پشتیبانی از ماندگاری: اگرچه Redis در حافظه است، اما در صورت نیاز میتواند دادهها را در دیسک ذخیره کند.
- ویژگیهای پیشرفته: شامل پیامرسانی pub/sub، اسکریپتنویسی Lua و خوشهبندی است.
🚀 کاربردهای Redis در ASP.NET Core
1. ذخیرهسازی توزیعشده
- Redis به عنوان یک حافظه پنهان متمرکز که در چندین نمونه برنامه به اشتراک گذاشته شده است، عمل میکند.
- ایدهآل برای محیطهای متعادلکننده بار که در آنها حافظه پنهان در حافظه برای هر سرور ایزوله میشود.
- با کاهش فراخوانیهای پایگاه داده برای دادههای پرکاربرد، عملکرد را بهبود میبخشد.
2. مدیریت جلسه
- ASP.NET Core میتواند جلسات کاربر را در Redis ذخیره کند و آنها را در بین سرورها قابل دسترسی کند.
- حتی در صورت راهاندازی مجدد یا خرابی سرور، پایداری جلسه را تضمین میکند.
3. ارتباط بلادرنگ
- Redis pub/sub را میتوان برای ویژگیهای بلادرنگ مانند اعلانها، برنامههای چت یا پخش رویداد استفاده کرد.
4. ادغام Azure
- برنامههای ASP.NET Core میتوانند به راحتی با Azure Cache برای Redis برای راهحلهای ذخیرهسازی مبتنی بر ابر ادغام شوند.
🛠️ نحوه استفاده از Redis در ASP.NET Core
- بسته NuGet مربوط به StackExchange.Redis را نصب کنید.
- اتصال Redis را در Startup.cs یا Program.cs پیکربندی کنید.
- از IDistributedCache یا کلاینتهای سفارشی Redis برای تعامل با حافظه پنهان استفاده کنید.
🛒 مثال دنیای واقعی: ذخیره سازی کاتالوگ محصولات در یک اپلیکیشن تجارت الکترونیک
🎯 سناریو
یک فروشگاه آنلاین هزاران محصول دارد. هر بار که کاربر از صفحه محصول بازدید میکند، اپلیکیشن برای جزئیات محصول از پایگاه داده پرس و جو میکند. این امر باعث موارد زیر میشود:
- بار زیاد پایگاه داده
- زمان پاسخگویی کندتر
- مقیاسپذیری ضعیف در هنگام افزایش ناگهانی ترافیک
💡 راه حل: استفاده از Redis به عنوان حافظه پنهان (Cache)
به جای اینکه هر بار به پایگاه داده مراجعه کند، برنامه ابتدا Redis را بررسی میکند. اگر دادههای محصول ذخیره شده باشند، فوراً برمیگرداند. در غیر این صورت، از پایگاه داده واکشی میشود، در Redis ذخیره میشود و به کاربر ارائه میشود.
🧑💻 ASP.NET Core Code Example
public class ProductService { private readonly IDistributedCache _cache; private readonly MyDbContext _db; public ProductService(IDistributedCache cache, MyDbContext db) { _cache = cache; _db = db; } public async Task<Product> GetProductAsync(int id) { var cacheKey = $"product:{id}"; var cachedProduct = await _cache.GetStringAsync(cacheKey); if (!string.IsNullOrEmpty(cachedProduct)) { return JsonSerializer.Deserialize<Product>(cachedProduct); } var product = await _db.Products.FindAsync(id); if (product != null) { var serialized = JsonSerializer.Serialize(product); await _cache.SetStringAsync(cacheKey, serialized, new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(30) }); } return product; } }
🧪 مورد استفاده در دنیای واقعی
شرکتهایی مانند Shopify، Amazon و Zalando از Redis برای ذخیره فهرست محصولات، جلسات کاربر و دادههای موجودی استفاده میکنند. این امر باعث کاهش تأخیر و بهبود تجربه کاربر در زمان اوج ترافیک میشود.