https://github.com/xin9le/CloudStructures
Dapper처럼, 로우 레벨의 StackExchange.Redis를 래핑하여 Redis의 ORM을 제공하는 라이브러리.
dotnet add package CloudStructures서ㅇㄹㄹ
public interface IGameDb
{
public Task<RediseErrorCode> SetUserInfo(UserInfoModel userInfo);
public Task<(RediseErrorCode, UserInfoModel)> GetUserInfo(string email);
}
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
}
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;
}
}