+3

Hướng Dẫn Tích Hợp Redis vào Ứng Dụng .NET

1. Giới Thiệu về Redis

Redis là một kho lưu trữ dữ liệu dạng key-value hiệu suất cao, thường được sử dụng để caching, quản lý session, và lưu trữ dữ liệu tạm thời. Việc tích hợp Redis vào ứng dụng .NET giúp cải thiện tốc độ và hiệu suất hệ thống.

2. Cài Đặt Redis Client cho .NET

Trong dự án .NET, bạn có thể sử dụng thư viện StackExchange.Redis để kết nối Redis:

image.png

3. Sử dụng Redis trong Service

3.1. Định nghĩa Interface ICacheService

public interface ICacheService
{
    Task SetAsync(string key, string value, TimeSpan? expiry = null);
    Task<string?> GetAsync(string key);
    Task RemoveAsync(string key);
}

3.2. Triển khai RedisCacheService

using HelloMyFriend.Services.Interface;
using Microsoft.Extensions.Caching.Distributed;
using StackExchange.Redis;
using System.Text.Json;

namespace HelloMyFriend.Services
{
    public class RedisCacheService : ICacheService
    {
        private readonly IDistributedCache _cache;

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

        public async Task SetAsync(string key, string value, TimeSpan? expiry = null)
        {
            var options = new DistributedCacheEntryOptions
            {
                AbsoluteExpirationRelativeToNow = expiry ?? TimeSpan.FromMinutes(10) // Mặc định 10 phút
            };

            await _cache.SetStringAsync(key, value, options);
        }

        public async Task<string?> GetAsync(string key)
        {
            return await _cache.GetStringAsync(key);
        }

        public async Task RemoveAsync(string key)
        {
            await _cache.RemoveAsync(key);
        }
        public async Task SetObjectAsync<T>(string key, T value, TimeSpan? expiry = null)
        {
            var options = new DistributedCacheEntryOptions
            {
                AbsoluteExpirationRelativeToNow = expiry ?? TimeSpan.FromMinutes(10)
            };

            var jsonData = JsonSerializer.Serialize(value);
            await _cache.SetStringAsync(key, jsonData, options);
        }

        public async Task<T?> GetObjectAsync<T>(string key)
        {
            var jsonData = await _cache.GetStringAsync(key);
            return jsonData != null ? JsonSerializer.Deserialize<T>(jsonData) : default;
        }
    }
}

4. Cấu Hình Redis Trong Ứng Dụng .NET

Mở Program.cs và thêm cấu hình Redis:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddStackExchangeRedisCache(delegate (RedisCacheOptions options)
{
    options.ConfigurationOptions = new ConfigurationOptions()
    {
        EndPoints = { "redis-16637.c292.ap-southeast-1-1.ec2.redns.redis-cloud.com:16637" }, // Endpoint của Sever Redis, hãy thay bằng Endpoint của bạn
        User = "default", // Tên tài khoản, hãy thay bằng Endpoint của bạn
        Password = "ZrwhjDdAIEudHlBDqjxfzGWll8WKVm9U" // Mật khẩu, hãy thay bằng Endpoint của bạn
    };
});

builder.Services.AddSingleton<ICacheService, RedisCacheService>();

var app = builder.Build();
app.Run();

5. Sử Dụng Redis Trong API Controller

using HelloMyFriend.Services.Interface;
using Microsoft.AspNetCore.Mvc;

namespace HelloMyFriend.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        private readonly ICacheService _cacheService;
        private readonly ILogger<WeatherForecastController> _logger;

        public WeatherForecastController(ILogger<WeatherForecastController> logger, ICacheService cacheService)
        {
            _logger = logger;
            _cacheService = cacheService;
        }

        [HttpPost("{key}/{value}")]
        public async Task<IActionResult> SetCache([FromRoute] string key, [FromRoute] string value)
        {
            await _cacheService.SetAsync(key, value, TimeSpan.FromMinutes(10));
            return Ok($"Key '{key}' đã được lưu vào Redis.");
        }

        [HttpGet("{key}")]
        public async Task<IActionResult> GetCache([FromRoute] string key)
        {
            var value = await _cacheService.GetAsync(key);
            if (value == null) return NotFound($"Key '{key}' không tồn tại.");
            return Ok(value);
        }

        [HttpDelete("{key}")]
        public async Task<IActionResult> RemoveCache([FromRoute] string key)
        {
            await _cacheService.RemoveAsync(key);
            return Ok($"Key '{key}' đã bị xóa khỏi Redis.");
        }
    }
}


Kết quả

image.png

Bây giờ mình thử sử dụng ứng dụng Redis Insight để kiểm tra lại nhé ! Đã lên dữ liệu rồi , thật tuyệt phải không nào 😁

image.png

Hi vọng thông qua bài viết này có thể giúp đỡ cho các bạn gặp khó khăn trong quá trình tích hợp Redis vào ứng dụng .NET. 😁

Xin cảm ơn quý các bạn đã đón xem ♥️


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí