🚀 کشینگ در ASP.NET Core (قسمت ۴):
قدرت توزیعشده با Redis
در قسمت قبل، یه متد توسعه خفن برای IDistributedCache نوشتیم. اما پیادهسازی پیشفرض اون (AddDistributedMemoryCache)، هنوز هم درون-حافظهای بود و کش رو بین سرورها به اشتراک نمیذاشت.
امروز وقتشه این مشکل رو برای همیشه حل کنیم و با Redis، یکی از محبوبترین و قدرتمندترین ابزارهای کشینگ توزیعشده، آشنا بشیم.
ردیس (Redis) چیست؟ 🧠
ردیس یک ذخیرهساز داده درون-حافظهای (in-memory) فوقالعاده سریعه که اغلب به عنوان یک کش توزیعشده با پرفورمنس بالا استفاده میشه. وقتی از Redis به عنوان کش استفاده میکنید، تمام نمونههای (instances) اپلیکیشن شما به یک سرور Redis مشترک وصل میشن و دادههای کش رو از اونجا میخونن و مینویسن.
این یعنی اگه ۱۰ تا سرور داشته باشید، کش بین همهشون یکسان و هماهنگه!
1️⃣ قدم اول: نصب پکیج
برای اینکه ASP.NET Core بتونه با Redis صحبت کنه، باید پکیج مخصوصش رو نصب کنیم:
Install-Package Microsoft.Extensions.Caching.StackExchangeRedis
این پکیج به ما اجازه میده Redis رو به راحتی به عنوان پیادهسازی IDistributedCache به پروژهمون اضافه کنیم.
2️⃣ قدم دوم: پیکربندی در Program.cs
حالا باید به برنامهمون بگیم که از Redis استفاده کنه. دو تا راه رایج برای این کار وجود داره:
👍🏻روش ساده (با Connection String):
این روش برای شروع عالیه. فقط کافیه آدرس سرور Redis رو بهش بدید.
var builder = WebApplication.CreateBuilder(args);
string redisConnectionString = builder.Configuration.GetConnectionString("Redis");
builder.Services.AddStackExchangeRedisCache(options =>
{
options.Configuration = redisConnectionString;
});
💯روش حرفهایتر (با IConnectionMultiplexer):
این روش کنترل بیشتری به شما میده و بهترین راه برای پروژههای بزرگه. شما خودتون یک نمونه از ConnectionMultiplexer رو به صورت Singleton ثبت میکنید.
string redisConnectionString = builder.Configuration.GetConnectionString("Redis");
IConnectionMultiplexer connectionMultiplexer =
ConnectionMultiplexer.Connect(redisConnectionString);
builder.Services.AddSingleton(connectionMultiplexer);
builder.Services.AddStackExchangeRedisCache(options =>
{
options.ConnectionMultiplexerFactory =
() => Task.FromResult(connectionMultiplexer);
});جادو اتفاق افتاد! ✨
تمام شد! حالا هرجایی از کدتون که IDistributedCache رو تزریق کنید، در پشت صحنه به جای کش حافظه، از Redis استفاده خواهد شد، بدون اینکه نیاز به تغییر حتی یک خط از کدهای قبلیتون (مثل متد GetOrCreateAsync) داشته باشید. این قدرت انتزاع (Abstraction) در #C هست!
🔖 هشتگها:
#ASPNETCore #Caching #Redis