Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Redis

การรวม Redis เข้ากับ .NET 8/9/10:บทช่วยสอนแบบทีละขั้นตอนที่ครอบคลุม

Redis เป็นที่จัดเก็บข้อมูลในหน่วยความจำประสิทธิภาพสูงที่ใช้กันอย่างแพร่หลายสำหรับการแคช การจัดการเซสชัน การวิเคราะห์แบบเรียลไทม์ และอื่นๆ ในคู่มือนี้ เราจะสำรวจวิธีผสานรวม Redis เข้ากับแอปพลิเคชัน .NET โดยใช้ StackExchange.Redis ซึ่งเป็นหนึ่งในไคลเอนต์ Redis ที่ได้รับความนิยมมากที่สุดสำหรับ .NET

1. ข้อกำหนดเบื้องต้น

ก่อนที่คุณจะเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณมี:

  • .NET 8/9/10 SDK ติดตั้งแล้ว

  • วิชวลสตูดิโอ หรือ รหัส VS

  • เซิร์ฟเวอร์ Redis ทำงานภายในเครื่องหรือผ่าน Docker

คุณสามารถเรียกใช้ Redis ภายในเครื่องด้วย Docker:

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

การรวม Redis เข้ากับ .NET 8/9/10:บทช่วยสอนแบบทีละขั้นตอนที่ครอบคลุม

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:สร้างคอนโทรลเลอร์

👉 โฟลเดอร์คอนโทรลเลอร์ → เพิ่ม → คอนโทรลเลอร์ → ตัวควบคุม 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 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
 });
 }
}

ขั้นตอนการทำงาน:

  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:เรียกใช้และทดสอบ

👉 ดำเนินโครงการ
👉 เบราว์เซอร์ / บุรุษไปรษณีย์ এ โทร :

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

การรวม Redis เข้ากับ .NET 8/9/10:บทช่วยสอนแบบทีละขั้นตอนที่ครอบคลุม