1. CloudStructures란

https://github.com/xin9le/CloudStructures

Dapper처럼, 로우 레벨의 StackExchange.Redis를 래핑하여 Redis의 ORM을 제공하는 라이브러리.

2. CloudStructure설치

Untitled

dotnet add package CloudStructures서ㅇㄹㄹ

3. 인터페이스 및 서비스 생성

3.1 인터페이스

public interface IGameDb
{
    public Task<RediseErrorCode> SetUserInfo(UserInfoModel userInfo);
    public Task<(RediseErrorCode, UserInfoModel)> GetUserInfo(string email);
}

3.2 서비스 초기화

public class RedisGameDb : IGameDb
{
  private readonly IConfiguration _redis;
  **RedisConfig _redisConfig;
  RedisConnection _redisConnection;**
  private readonly ILogger _logger;

	public RedisGameDb(IConfiguration config, ILogger<RedisGameDb> logger)
  {
			// appSetting.json파일에서 Redis의 IP주소를 가져옴
      string _connectionString = config.GetSection("ConnectionStrings")["Redis_UserInfos"];
			// TODO: name의 역할이 뭐지???
			**_redisConfig = new CloudStructures.RedisConfig("test", _connectionString);
			// 연결 생성
      _redisConnection = new RedisConnection( _redisConfig );**
      _logger = logger;
  }
	...
	public 
}

3.3 유저의 정보를 Json형태로 직렬화 해서 저장

3.4 유저의 정보를 역직렬화 해서 반환

3.3 유저의 정보를 담은 객체를 저장.

public async Task<RediseErrorCode> SetUserInfo(UserInfoModel userInfo)
{
  try
  {
		// key값을 포함한 redis에 저장 된 데이터 타입 정의.key값은 "userInfo:" + 이메일의 형태.
		//   userInfo 외에 로그 등 다양한 정보를 넣기 위해 용도 + 식별용데이터 형태로 저장.
		// 탬플릿 인자에 객체를 넣어준다.
    var redisString = new RedisString<**UserInfoModel**>(_redisConnection, "userInfo:" + userInfo.Email, TimeSpan.FromHours(1));
    // 위에서 정의한 데이터 타입 대로 값을 저장.
		//   직렬화 한 데이터(value)를 저장 만료기간(1시간)을 두어 저장한다.
		await redisString.SetAsync(**userInfo**, TimeSpan.FromHours(1));
    return RediseErrorCode.SUCCESS;
  }
  catch (Exception e)
  {
    _logger.ZLogError(e, "SetUserInfo");
    return RediseErrorCode.INVALID_USER;
  }
}

3.4 유저의 정보를 담은 객체데이터를 가져옴.