Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Redis

.NET 8/9/10 के साथ Redis इंटीग्रेशन: एक व्यापक चरण-दर-चरण ट्यूटोरियल

Redis एक हाई-परफॉरमेंस, इन-मेमोरी डेटा स्टोर है जिसका व्यापक रूप से कैशिंग, सेशन मैनेजमेंट, रियल-टाइम एनालिटिक्स और अधिक के लिए उपयोग किया जाता है। इस गाइड में, हम StackExchange.Redis का उपयोग करके Redis को .NET एप्लिकेशन के साथ इंटीग्रेट करने का तरीका देखेंगे, जो .NET के लिए सबसे लोकप्रिय Redis क्लाइंट्स में से एक है।

1. पूर्वापेक्षाएँ

शुरू करने से पहले, सुनिश्चित करें कि आपके पास है:

  • .NET 8/9/10 SDK इंस्टॉल्ड

  • Visual Studio या VS Code

  • Redis सर्वर स्थानीय रूप से या Docker के माध्यम से चल रहा है

आप Docker के साथ स्थानीय रूप से Redis चला सकते हैं:

docker run --name redis -p 6379:6379 -d redis

.NET 8/9/10 के साथ Redis इंटीग्रेशन: एक व्यापक चरण-दर-चरण ट्यूटोरियल

2. Redis क्लाइंट इंस्टॉल करना

प्रोजेक्ट → राइट क्लिक → मैनेज NuGet → इंस्टॉल:

Microsoft.EntityFrameworkCore Npgsql.EntityFrameworkCore.PostgreSQL Microsoft.Extensions.Caching.StackExchangeRedis

चरण 3: 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();

चरण 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: कंट्रोलर बनाएं

👉 कंट्रोलर्स फोल्डर → Add → कंट्रोलर → API कंट्रोलर

👉 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 });
    }
}

वर्कफ्लो:

  1. पहले Redis कैश चेक करें।
  2. यदि कैश मिस, तो DB से लाएं।
  3. एक्सपायरेशन के साथ डेटा को Redis में स्टोर करें।

5. उन्नत Redis उपयोग

  • हैशेज: संरचित डेटा स्टोर करें:

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. सर्वोत्तम अभ्यास

  • मल्टीपल कनेक्शन से बचने के लिए ConnectionMultiplexer को सिंगलटन के रूप में उपयोग करें।

  • Redis को मुख्य रूप से कैश के रूप में उपयोग करें, प्राइमरी डेटाबेस के रूप में नहीं।

  • कैश्ड कुंजियों के लिए एक्सपायरेशन (TTL) सेट करें ताकि मेमोरी समस्याएं न हों।

🧪 चरण 7: चलाएं और टेस्ट करें

👉 प्रोजेक्ट चलाएं
👉 ब्राउज़र / Postman में कॉल करें:

https://localhost:xxxx/api/product/1

.NET 8/9/10 के साथ Redis इंटीग्रेशन: एक व्यापक चरण-दर-चरण ट्यूटोरियल

  1. Tkinter में Text विजेट में कॉपी, पेस्ट और बैकस्पेस कैसे रोकें? Tkinter में Text विजेट में कॉपी, पेस्ट और बैकस्पेस कैसे रोकें?

    Text विजेट मल्टीलाइन उपयोगकर्ता इनपुट स्वीकार करता है, जहां आप टेक्स्ट टाइप कर सकते हैं और कॉपी, पेस्ट और डिलीट जैसे ऑपरेशन कर सकते हैं। Text विजेट पर विभिन्न ऑपरेशन के शॉर्टकट को अक्षम करने के कुछ तरीके हैं। Text विजेट में कॉपी, पेस्ट और बैकस्पेस को अक्षम करने के लिए, आपको इवेंट को इवेंट हैंडलर के

  1. Matplotlib में pcolor कलरबार को अलग सबप्लॉट में कैसे प्लॉट करें? Matplotlib में pcolor कलरबार को अलग सबप्लॉट में कैसे प्लॉट करें?

    कई सबप्लॉट्स वाले फिगर में, प्रत्येक सबप्लॉट का अपना कलरबार अलग-अलग एक्सिस पर रखने के लिए fig.colorbar() में ax पैरामीटर का उपयोग किया जाता है। चरण फिगर का आकार सेट करें और पैडिंग समायोजित करें। दो पंक्तियों और दो कॉलम के साथ फिगर और सबप्लॉट्स का सेट बनाएं। कलरमैप्स की सूची बनाएं। एक्सिस पर पुनराव

  1. HTML DOM MouseEvent pageX प्रॉपर्टी HTML DOM MouseEvent pageX प्रॉपर्टी

    परिचय HTML DOM MouseEvent pageX प्रॉपर्टी डॉक्यूमेंट के सापेक्ष माउस पॉइंटर का क्षैतिज (x) निर्देशांक लौटाती है यदि कोई माउस इवेंट ट्रिगर हुआ हो। वर्टिकल निर्देशांक प्राप्त करने के लिए pageY के साथ उपयोग करें। सिंटैक्स pageX ऑब्जेक्ट का रेफरेंस वापस करना: MouseEventObject.pageX उदाहरण 95 && y <