1. पूर्वावश्यकताएँ
<पी> शुरू करने से पहले, सुनिश्चित करें कि आपके पास: है- <पी> .NET 8/9/10 एसडीके स्थापित
- <पी> विज़ुअल स्टूडियो या वीएस कोड पी>
- <पी> रेडिस सर्वर स्थानीय स्तर पर या डॉकर के माध्यम से चल रहा है
docker run --name redis -p 6379:6379 -d redis <पी>
2. रेडिस क्लाइंट स्थापित करना
<पी> प्रोजेक्ट → राइट क्लिक करें → NuGet प्रबंधित करें → इंस्टॉल करें:Microsoft.EntityFrameworkCore
Npgsql.EntityFrameworkCore.PostgreSQL
Microsoft.Extensions.Caching.StackExchangeRedis चरण 3:प्रोग्राम.सीएस सेटअप
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(); चरण 4:मॉडल + 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; }
} चरण 5:डेटाबेस बनाएं (PostgreSQL)
CREATE TABLE "Products" (
"Id" SERIAL PRIMARY KEY,
"Name" TEXT
);
INSERT INTO "Products" ("Name") VALUES ('Laptop'), ('Mobile'); चरण 6:नियंत्रक बनाएं
<पी> 👉 नियंत्रक फ़ोल्डर → जोड़ें → नियंत्रक → एपीआई नियंत्रक👉 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 check
var cachedData = await _cache.GetStringAsync(cacheKey);
if (cachedData != null)
{
var product = JsonSerializer.Deserialize<Product>(cachedData);
return Ok(new
{
source = "Redis",
data = product
});
}
// 🗄️ DB call
var productFromDb = await _context.Products.FindAsync(id);
if (productFromDb == null)
return NotFound();
// 🔥 Save to Redis
var options = new DistributedCacheEntryOptions()
.SetAbsoluteExpiration(TimeSpan.FromMinutes(5));
await _cache.SetStringAsync(
cacheKey,
JsonSerializer.Serialize(productFromDb),
options
);
return Ok(new
{
source = "Database",
data = productFromDb
});
}
} <पी> वर्कफ़्लो: पी> - <पी> पहले रेडिस कैश की जाँच करें।
- <पी> यदि कैश छूट जाए, तो DB से प्राप्त करें।
- <पी> Redis में समाप्ति तिथि के साथ डेटा संग्रहीत करें।
5. उन्नत रेडिस उपयोग
- <पी> हैश: संरचित डेटा संग्रहित करें:
await _db.HashSetAsync("user:1", new HashEntry[]
{
new HashEntry("name", "Shafaet"),
new HashEntry("age", 26)
}); <पी> सूचियाँ: कतारें या संदेश सूचियाँ लागू करें: await _db.ListRightPushAsync("messages", "Hello World");
var msg = await _db.ListLeftPopAsync("messages"); <पी> पब/उप: वास्तविक समय सूचनाएं: var sub = _redis.GetSubscriber();
await sub.SubscribeAsync("channel", (ch, val) => Console.WriteLine(val));
await sub.PublishAsync("channel", "Hello subscribers!");
6. सर्वोत्तम प्रथाएँ
- <पी> कनेक्शनमल्टीप्लेक्सर का उपयोग करें एकाधिक कनेक्शन से बचने के लिए एक सिंगलटन के रूप में।
- <पी> रेडिस का उपयोग मुख्य रूप से कैश के रूप में करें , प्राथमिक डेटाबेस नहीं।
- <पी> समाप्ति (टीटीएल) सेट करें स्मृति समस्याओं को रोकने के लिए कैश्ड कुंजियों के लिए।
🧪 चरण 7:चलाएँ और परीक्षण करें
<पी> 👉प्रोजेक्ट चलाएँ👉 ब्राउजर/पोस्टमैन এ कॉल :
https://localhost:xxxx/api/product/1 <पी>