본문 바로가기
프로그래밍/C#

C# StackExchange 사용해서 redis에 객체 저장하고 불러오기

by bantomak 2025. 1. 13.
반응형

Nuget에서 StackExchange 설치하기

.Net 개발환경에서 제공하는 패키지 관리 시스템인 Nuget을 이용해서 간단하게 .Net 환경에서 레디스를 사용할 수 있다. 아래의 과정을 따라서 진행해 보자.

 

프로젝트 선택 -> 오른쪽 마우스 클릭 -> Nuget 패키지 관리 선택 -> 찾아보기에서 'StackExchange.Redis'로 검색해서 해당 패키지를 다운로드 및 설치해 주자.

appsettings.json에 redis 세팅 저장하기

이제 StackExchange 패키지를 사용하면 레디스를 쉽게 사용하는 게 가능하다. StackExchange를 초기화하는 부분에서 redis의 위치를 지정해줘야 한다. 이때 직접 문자열로 해당 위치를 지정할 수도 있지만 appsettings.json을 읽어서 해당 정보를 가져오는 구조가 더 올바른 구조이기 때문에 이전 포스팅을 참고해서 redis의 위치를 지정해 보자.

// appsettings.json 파일
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",

  "AppSettings": {
    "AppName": "MyAppName",
    "AppVersion": 1.0
  },
  "Redis": {
    "ConnectionString": "localhost:6379"
  }
}
 

C# 웹앱에서 appsettings.json 설정값 사용하기

appsettings.json프로젝트 세팅을 읽는 가장 보편적인 방식은 JSONConfigurationProvider를 사용하는 것이다.이 제공자는 appsettings.json 파일에 정의된 설정값들을 앱에 제공한다. 이 파일은 프로젝트가 빌드

jettstream.tistory.com

RedisHelpler 클래스

RedisHelper 클래스 생성자에서 redisSetting 객체를 이용해서 ConnectionString을 가져와서 레디스의 초기화를 진행하였다.

using Microsoft.Extensions.Options;
using redis_test;
using StackExchange.Redis;
using System.Text.Json;

public class RedisHelper
{
    private readonly ConnectionMultiplexer _redis;
    private readonly IDatabase _database;

    public RedisHelper(IOptions<RedisSetting> redisSetting)
    {
    	// 문자열을 직접 입력하는 방식이 아닌 redisSetting 객체를 가져와서 해당 값으로 설정
        _redis = ConnectionMultiplexer.Connect(redisSetting.Value.ConnectionString);
        _database = _redis.GetDatabase();
    }

    // Save an object to Redis
    public void SetObject<T>(string key, T value, TimeSpan? expiry = null)
    {
        string json = JsonSerializer.Serialize<T>(value);
        _database.StringSet(key, json, expiry);
    }

    // Retrieve an object from Redis
    public T? GetObject<T>(string key)
    {
        var value = _database.StringGet(key);
        if (value.IsNullOrEmpty)
        {
            return default;
        }

        return JsonSerializer.Deserialize<T>(value);
    }
}

RedisSetting 클래스

public class RedisSetting
{
    public string ConnectionString { get; set; } = "";
}

Program.cs

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureServices((context, services) =>
        {
            // 1. Access IConfiguration from HostContext
            IConfiguration configuration = context.Configuration;

            // 2. Bind "AppSettings" section to AppSettings class
            services.Configure<RedisSetting>(configuration.GetSection("Redis"));

            // 3. Add additional services (example)
            services.AddTransient<IMyService, MyService>();
            services.AddSingleton<RedisHelper>(); // 싱글톤으로 레디스 객체 추가

            // 4. Add a hosted service for demonstration
            services.AddHostedService<MyHostedService>();
        });
}

MyService.cs

redisHelpler를 이용해서 객체를 레디스에 문자열로 저장하고 해당 문자열을 다시 키값으로 읽어와서 객체로 복원하는 일련이 과정이 가능해졌다.

public interface IMyService
{
    void DisplaySettings();
}

public class MyService : IMyService
{
    private readonly RedisHelper _redisHelper;

    public MyService(RedisHelper redisHelper)
    {
    	// singleton으로 등록했기때문에 의존성 주입이 가능하다.
        _redisHelper = redisHelper;
    }

    public void DisplaySettings()
    {
        _redisHelper.SetObject<Employee>("1", new Employee()
        {
            Id = 1,
            Name = "Sujan Kay",
            Department = "Human Resource",
            JoiningDate = DateTime.UtcNow
        });

        var result = _redisHelper.GetObject<Employee>("1");
        if (result == null) return;

        Console.WriteLine(result.Id);
        Console.WriteLine(result.Name);
        Console.WriteLine(result.Department);
        Console.WriteLine(result.JoiningDate);
    }
}

redis에서 직접 해당 키로 조회

redis-cli에 직접 접근해서 해당하는 키로 문자열을 조회하면 json 형식으로 저장된 문자열을 직접 확인하는 게 가능하다.

위에 예제에서 key값 1로 저장했기 때문에 1로 조회하자.

$ docker exec -it {컨테이너-이름} redis-cli
$ get 1

함께 읽으면 좋은 글

 

도커(Docker)로 레디스(redis) 실행하기

항상 동일한 환경으로 레디스 실행하기 메모리에 상주하는 레디스(Redis)는 인메모리 방식으로 다른 RDS와 다르게 엄청난 속도를 보장한다. 이런 레디스를 항상 동일한 환경으로 배포해보자. 도커

jettstream.tistory.com

 

도커로 설치한 Redis CLI로 접근하기

도커에 redis 이미지가 있는지 확인하기우선 redis가 이미지가 있어야 한다. 현재 어떤 이미지를 가지고 있는지 확인해 보자.$ docker imagesredis 이미지가 있다면 그대로 진행하고 redis 이미지가 없다

jettstream.tistory.com

 

C# 간단하게 Json 형식 파싱하기

간단하게 C#으로 Json 형식 파싱하기웹 관련으로 일을 하다보면 Json을 많이 접하겠지만 웹과 거리가 있다보면 Json을 다루는 일은 많지 않다고 생각된다. 간단하게 C#의 System.Text.Json을 이용해서 Json

jettstream.tistory.com

댓글