일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- quick sort
- 정렬
- 알고리즘
- C#
- 자료구조
- 백준
- .net maui
- docker-compose
- asp.net
- Merge Sort
- 탐색
- asp.net core
- sql
- Docker
- .NET
- 도커
- Get
- 파이썬
- REDIS
- API
- dfs
- .net core
- mysql
- 스택
- 큐
- 재귀
- maui
- 시간복잡도
- BFS
- C++
- Today
- Total
코젤브
[Redis] C# ASP.NET Core - CloudStructures 본문
C# ASP.NET Core 에서 Redis는 어떻게 사용할까?
바로 CloudStructures 라이브러리를 사용하면 아주 쉽게 사용할 수 있다!!
기존 StackExchange.Redis를 기반으로 만든 Redis client이다.
데이터 직렬화 관련해서 클래스나 구조체를 Redis에 저장 시 기본 Json 포맷으로 자동 직렬화해주기 때문에 편하다
CloudStructures 가 지원하는 Redis의 Data Structure는 아래와 같다 (모두 async)

NuGet에서 추가하면 된다.

아래처럼 using으로 사용하기
using CloudStructures.Structures;
using CloudStructures;
연결 객체 생성
private readonly RedisConnection _redisConn;
생성자 : DI를 통해 필요한 설정값과 객체를 주입받음
public MemoryDb(IOptions<DbConfig> dbConfig, ILogger<MemoryDb> logger)
{
_logger = logger;
// Redis 설정을 사용하여 Redis 연결 초기화
RedisConfig config = new RedisConfig("default", dbConfig.Value.RedisGameDBConnection);
_redisConn = new RedisConnection(config);
_redisExpiryHours = dbConfig.Value.RedisExpiryHours;
}
- 나의 경우 logger를 사용해서 로깅설정까지 해주었다.
- dbconfig에 지정해둔 Redis의 주소와 포트번호를 가지고 연결하고 있다!
Redis에 클래스 형식으로 저장하는 메서드 예시
// 사용자 로그인 정보를 Redis에 저장하는 메서드
public async Task<bool> SaveUserLoginInfo(string userId, string token)
{
var key = KeyGenerator.UserLogin(userId); // 키 생성
var loginInfo = new LoginInfo
{
UserId = userId,
Token = token
};
var redis = new RedisString<PlayerLoginInfo>(_redisConn, key, TimeSpan.FromHours(2));
bool result = await redis.SetAsync(playerLoginInfo); // Redis에 데이터 저장
if (result)
{
_logger.LogInformation("Successfully saved login info for UserId: {UserId}", userId);
}
else
{
_logger.LogWarning("Failed to save login info for UserId: {UserId}", userId);
}
return result;
}
- value 값을 내가 커스텀한 객체 형식으로 넣으면, json으로 만들어서 String 형식으로 Redis에 저장해준다! 정말 편하죠
- 또한 Redis에 저장할 때 꼭 3번째 인자에 만료 시간을 넣어줘야 한다!
(까먹으면 영원히 삭제되지 않아 Redis가 아파할수 있다.......)
위 코드에서는 매직넘버로 사용하고 있지만 상수화 시켜서 관리하는 것이 좋다!
SET 외에도 GET을 할 수 있는데 GET 예제는 아래와 같다.
Redis에서 데이터 조회하는 메서드
// Redis에서 게임 데이터를 조회하는 메서드
public async Task<byte[]> GetGameDataAsync(string key)
{
try
{
var redisString = new RedisString<byte[]>(_redisConn, key, TimeSpan.FromMinutes(20)); // 조회할 때마다 만료 시간 갱신
var result = await redisString.GetAsync();
if (result.HasValue)
{
_logger.LogInformation("Successfully retrieved data for Key={Key}", key);
return result.Value;
}
else
{
_logger.LogWarning("No data found for Key={Key}", key);
return null;
}
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to retrieve data for Key={Key}", key);
return null;
}
}
- 이때 조회할 때도 만료시간을 정해야하는데 이 부분이 일반적으로 "데이터를 가져올 때 만료 시간을 갱신하는 역할"을 수행한다고 한다.
- 내가 코드를 작성할 때 만료시간을 작성하지 않으면 오류가 발생해서 생성 시간과 똑같이 작성했던 것 같다.
물론 데이터 삭제 함수도 있다
redisString.DeleteAsync(); // 데이터 삭제
간편하게 Redis를 사용할 수 있어서 아주 좋다
더 많은 사용법은 공식 문서를 추천한다
[깃허브 공식문서] https://github.com/xin9le/CloudStructures
GitHub - xin9le/CloudStructures: Redis Client based on StackExchange.Redis.
Redis Client based on StackExchange.Redis. Contribute to xin9le/CloudStructures development by creating an account on GitHub.
github.com
'컴공의 일상 > C#' 카테고리의 다른 글
[MySQL] SQL 쿼리문(Insert/Select) 사용 시 실패 여부 확인 (0) | 2024.07.26 |
---|---|
[.NET core] SqlKata 사용 시 유의사항 - FirstOrDefaultAsync<> (2) | 2024.07.24 |
[Redis] 기본 명령어 (0) | 2024.07.19 |
[Blazor] 외부 API 연동 시 HttpClient - CORS policy (0) | 2024.07.15 |
[Blazor] 컴포넌트 소개 및 활용 (0) | 2024.07.15 |