반응형
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"
}
}
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
함께 읽으면 좋은 글
'프로그래밍 > C#' 카테고리의 다른 글
C# 폴더 안에 있는 모든 파일 찾기 (0) | 2025.01.23 |
---|---|
C# 웹앱에서 appsettings.json 설정값 사용하기 (0) | 2025.01.07 |
C# 업그레이드된 자동 구현 속성(Auto-Implement Property)에 대해서 (0) | 2024.12.29 |
C# Count vs Count() 차이에 대해서 (0) | 2024.12.16 |
C# 속성(Property)이란 무엇인가 (1) | 2024.12.12 |
댓글