Redis একটি হাই-পারফরম্যান্স, ইন-মেমরি ডেটা স্টোর যা ক্যাশিং, সেশন ম্যানেজমেন্ট, রিয়েল-টাইম অ্যানালিটিক্স, এবং আরও অনেক কিছুর জন্য ব্যাপকভাবে ব্যবহৃত হয়। এই গাইডে, আমরা এক্সপ্লোর করব .NET অ্যাপ্লিকেশনের সাথে Redis ইন্টিগ্রেট করার পদ্ধতি StackExchange.Redis ব্যবহার করে, যা .NET-এর জন্য সবচেয়ে পপুলার Redis ক্লায়েন্টের মধ্যে একটি।
১. পূর্বশর্ত
শুরু করার আগে, নিশ্চিত করুন আপনার কাছে আছে:
.NET 8/9/10 SDK ইনস্টল্ড
Visual Studio বা VS Code
Redis সার্ভার লোকালি রান করছে বা Docker-এর মাধ্যমে
আপনি Docker দিয়ে লোকালি Redis রান করতে পারেন:
docker run --name redis -p 6379:6379 -d redis

২. Redis ক্লায়েন্ট ইনস্টল করা
প্রজেক্ট → রাইট ক্লিক → Manage NuGet → ইনস্টল:
Microsoft.EntityFrameworkCore Npgsql.EntityFrameworkCore.PostgreSQL Microsoft.Extensions.Caching.StackExchangeRedis
স্টেপ ৩: Program.cs সেটআপ
using Microsoft.EntityFrameworkCore; var builder = WebApplication.CreateBuilder(args); // PostgreSQL builder.Services.AddDbContext<AppDbContext>(options => options.UseNpgsql("Host=localhost;Port=5432;Database=testdb;Username=postgres;Password=1234")); // Redis builder.Services.AddStackExchangeRedisCache(options => { options.Configuration = "localhost:6379"; }); builder.Services.AddControllers(); var app = builder.Build(); app.MapControllers(); app.Run();
স্টেপ ৪: মডেল + DbContext
👉 Product.cs
public class Product { public int Id { get; set; } public string Name { get; set; } }
👉 AppDbContext.cs
using Microsoft.EntityFrameworkCore; public class AppDbContext : DbContext { public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) {} public DbSet<Product> Products { get; set; } }
স্টেপ ৫: ডাটাবেস তৈরি (PostgreSQL)
CREATE TABLE "Products" ( "Id" SERIAL PRIMARY KEY, "Name" TEXT ); INSERT INTO "Products" ("Name") VALUES ('Laptop'), ('Mobile');
স্টেপ ৬: কন্ট্রোলার তৈরি
👉 Controllers ফোল্ডার → Add → Controller → API Controller
👉 ProductController.cs
using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Caching.Distributed; using System.Text.Json; [ApiController] [Route("api/[controller]")] public class ProductController : ControllerBase { private readonly AppDbContext _context; private readonly IDistributedCache _cache; public ProductController(AppDbContext context, IDistributedCache cache) { _context = context; _cache = cache; } [HttpGet("{id}")] public async Task<IActionResult> Get(int id) { string cacheKey = $"product_{id}"; // 🔴 Redis চেক var cachedData = await _cache.GetStringAsync(cacheKey); if (cachedData != null) { var product = JsonSerializer.Deserialize<Product>(cachedData); return Ok(new { source = "Redis", data = product }); } // 🗄️ DB কল var productFromDb = await _context.Products.FindAsync(id); if (productFromDb == null) return NotFound(); // 🔥 Redis-এ সেভ var options = new DistributedCacheEntryOptions() .SetAbsoluteExpiration(TimeSpan.FromMinutes(5)); await _cache.SetStringAsync( cacheKey, JsonSerializer.Serialize(productFromDb), options ); return Ok(new { source = "Database", data = productFromDb }); } }
Workflow:
প্রথমে Redis ক্যাশ চেক করুন।
ক্যাশ মিস হলে, DB থেকে ফেচ করুন।
এক্সপায়ারেশনসহ ডেটা Redis-এ স্টোর করুন।
৫. অ্যাডভান্সড Redis ব্যবহার
Hashes: স্ট্রাকচারড ডেটা স্টোর:
await _db.HashSetAsync("user:1", new HashEntry[] { new HashEntry("name", "Shafaet"), new HashEntry("age", 26) });
Lists: কিউ বা মেসেজ লিস্ট ইমপ্লিমেন্ট:
await _db.ListRightPushAsync("messages", "Hello World"); var msg = await _db.ListLeftPopAsync("messages");
Pub/Sub: রিয়েল-টাইম নোটিফিকেশন:
var sub = _redis.GetSubscriber(); await sub.SubscribeAsync("channel", (ch, val) => Console.WriteLine(val)); await sub.PublishAsync("channel", "Hello subscribers!");
৬. বেস্ট প্র্যাকটিস
ConnectionMultiplexer সিঙ্গলটন হিসেবে ব্যবহার করুন মাল্টিপল কানেকশন এড়াতে।
Redis ব্যবহার করুন মূলত একটি ক্যাশ হিসেবে, প্রাইমারি ডাটাবেস হিসেবে নয়।
ক্যাশড কীগুলোর জন্য এক্সপায়ারেশন (TTL) সেট করুন মেমরি সমস্যা প্রতিবন্ধক করতে।
🧪 স্টেপ ৭: রান & টেস্ট
👉 প্রজেক্ট রান করুন
👉 ব্রাউজার / Postman-এ কল করুন :
https://localhost:xxxx/api/product/1
