0
0
Lập trình
Sơn Tùng Lê
Sơn Tùng Lê103931498422911686980

Triển khai Caching trong .NET Core Web API

Đăng vào 3 tuần trước

• 5 phút đọc

Giới thiệu

Caching là một trong những phương pháp hiệu quả nhất để cải thiện hiệu suất và khả năng mở rộng của API. Bằng cách lưu trữ dữ liệu được yêu cầu thường xuyên, bạn có thể giảm tải cho cơ sở dữ liệu, tăng tốc độ phản hồi và xử lý lưu lượng truy cập cao hơn mà không làm giảm hiệu suất.

Trong bài viết này, chúng ta sẽ khám phá caching bộ nhớ, caching phản hồicaching phân tán trong .NET Core Web API với các ví dụ thực tiễn.

Mục lục

  1. Caching phản hồi
  2. Caching bộ nhớ
  3. Caching phân tán
  4. Tổng kết
  5. Câu hỏi thường gặp

1. Caching phản hồi

Caching phản hồi cho phép các phản hồi từ API của bạn được lưu trữ và sử dụng lại trong một khoảng thời gian xác định.

Cài đặt trong Program.cs

csharp Copy
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddResponseCaching();
var app = builder.Build();
app.UseResponseCaching();
app.MapControllers();
app.Run();

Sử dụng caching phản hồi trong Controller

csharp Copy
[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
    [HttpGet]
    [ResponseCache(Duration = 60, Location = ResponseCacheLocation.Client)]
    public IActionResult Get()
    {
        var products = new[] { "Sản phẩm 1", "Sản phẩm 2" };
        return Ok(products);
    }
}

✅ Phản hồi API sẽ được cached trong 60 giây trên client.

2. Caching bộ nhớ

Caching bộ nhớ lưu trữ dữ liệu trong bộ nhớ của server.

Cài đặt trong Program.cs

csharp Copy
builder.Services.AddMemoryCache();

Sử dụng caching bộ nhớ trong Controller

csharp Copy
[ApiController]
[Route("api/[controller]")]
public class OrdersController : ControllerBase
{
    private readonly IMemoryCache _cache;

    public OrdersController(IMemoryCache cache)
    {
        _cache = cache;
    }

    [HttpGet]
    public IActionResult GetOrders()
    {
        const string cacheKey = "orders_list";
        if (!_cache.TryGetValue(cacheKey, out string[] orders))
        {
            // Giả lập việc lấy từ cơ sở dữ liệu
            orders = new[] { "Đơn hàng 1", "Đơn hàng 2" };

            var cacheOptions = new MemoryCacheEntryOptions
            {
                AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5),
                SlidingExpiration = TimeSpan.FromMinutes(2)
            };

            _cache.Set(cacheKey, orders, cacheOptions);
        }

        return Ok(orders);
    }
}

✅ Giảm thiểu các cuộc gọi đến cơ sở dữ liệu cho dữ liệu được truy cập thường xuyên.

3. Caching phân tán

Caching phân tán lưu trữ cache bên ngoài ứng dụng, phù hợp cho môi trường đa server.

Cài đặt với Redis

bash Copy
dotnet add package Microsoft.Extensions.Caching.StackExchangeRedis
csharp Copy
builder.Services.AddStackExchangeRedisCache(options =>
{
    options.Configuration = "localhost:6379";
    options.InstanceName = "MyApp_";
});

Sử dụng caching phân tán trong Controller

csharp Copy
[ApiController]
[Route("api/[controller]")]
public class CustomersController : ControllerBase
{
    private readonly IDistributedCache _cache;

    public CustomersController(IDistributedCache cache)
    {
        _cache = cache;
    }

    [HttpGet]
    public async Task<IActionResult> GetCustomers()
    {
        var cacheKey = "customers_list";
        var cachedData = await _cache.GetStringAsync(cacheKey);

        if (string.IsNullOrEmpty(cachedData))
        {
            var customers = new[] { "Khách hàng 1", "Khách hàng 2" };
            cachedData = System.Text.Json.JsonSerializer.Serialize(customers);
            var options = new DistributedCacheEntryOptions
            {
                AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10)
            };

            await _cache.SetStringAsync(cacheKey, cachedData, options);
        }

        var result = System.Text.Json.JsonSerializer.Deserialize<string[]>(cachedData);
        return Ok(result);
    }
}

✅ Hoạt động trên nhiều instance của API trong môi trường cân bằng tải.

Tổng kết

Caching là điều cần thiết để cải thiện hiệu suất, khả năng mở rộng và trải nghiệm người dùng của API. Trong .NET Core Web API, bạn có một số tùy chọn:

  • Caching phản hồi: Để caching đơn giản, phía client của các phản hồi.
  • Caching bộ nhớ: Caching nhanh trong một instance server duy nhất.
  • Caching phân tán: Caching có thể mở rộng trên nhiều server (ví dụ: Redis).

Bằng cách triển khai caching một cách hợp lý, bạn có thể giảm tải cơ sở dữ liệu và cải thiện thời gian phản hồi cho người dùng của mình.

Câu hỏi thường gặp

1. Caching là gì?
Caching là quá trình lưu trữ dữ liệu tạm thời để truy cập nhanh hơn và giảm tải cho hệ thống.

2. Tôi nên sử dụng loại caching nào?
Điều này phụ thuộc vào nhu cầu của ứng dụng của bạn. Nếu chỉ cần caching đơn giản, bạn có thể sử dụng caching phản hồi. Nếu cần hiệu suất tốt hơn trong môi trường phức tạp, hãy xem xét caching phân tán.

3. Caching có ảnh hưởng đến bảo mật không?
Có, bạn cần cẩn thận với dữ liệu nhạy cảm. Đảm bảo không lưu trữ thông tin nhạy cảm trong cache hoặc thiết lập các biện pháp bảo mật phù hợp.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào