값 가져오기

Redis 값 가져오기 Get

  1. 하위 API:IDatabase.StringGet(key),Redis에서 문자열 타입 데이터를 읽으며 반환 타입은 RedisValue
  2. RedisValue.HasValue:key 존재 여부와 데이터 유무 확인
    • true:key가 존재함;
    • false:key가 존재하지 않음
  3. 이진 데이터를 읽은 뒤 역직렬화를 진행해 원본 객체로 복원해야 합니다
  4. 존재하지 않으면 default(T) 반환
    • 값 형식(int/DateTime):0, 최소 시간 반환
    • 참조 형식(class):null 반환

예시

using StackExchange.Redis;
using Newtonsoft.Json;
using System.Text;

/// <summary>
/// Key로 캐시 객체 읽어오기
/// </summary>
/// <typeparam name="T">대상 객체 타입</typeparam>
/// <param name="key">캐시 키 이름</param>
/// <returns>존재하면 객체 반환, 없으면 default(T) 반환</returns>
public T Get<T>(string key)
{
    // redis에서 데이터 읽기
    RedisValue rValue = db.StringGet(key);

    // key가 없는 경우 판단
    if (!rValue.HasValue)
    {
        return default(T);
    }

    // 이진 데이터 역직렬화로 엔티티 복원
    T result = Deserialize<T>(rValue);
    return result;
}

/// <summary>
/// 역직렬화:byte[] → T 객체
/// </summary>
private T Deserialize<T>(byte[] serializedObject)
{
    if (serializedObject == null)
    {
        return default(T);
    }
    // byte 배열을 json 문자열로 변환
    string json = Encoding.UTF8.GetString(serializedObject);
    // json을 대상 엔티티로 변환
    return JsonConvert.DeserializeObject<T>(json);
}

/// <summary>
/// 객체 직렬화 메서드(Set과 짝지어 사용)
/// </summary>
private byte[] Serialize(object data)
{
    string json = JsonConvert.SerializeObject(data);
    return Encoding.UTF8.GetBytes(json);
}Code language: C# (cs)

유의사항

  1. 타입 암시적 변환
    RedisValuebyte[]로 직접 암시 변환이 가능하므로 rValue 를 그대로 Deserialize<T>(byte[]) 에 넘기면 컴파일러가 자동으로 처리합니다.
  2. 읽기‑쓰기 짝지은 흐름
Set 쓰기 흐름:엔티티 → Serializebyte[]Redis
Get 읽기 흐름:Redisbyte[]Deserialize → 엔티티Code language: CSS (css)
  1. 호출 예시
// 예시1:커스텀 엔티티 읽기
var user = Get<User>("user_1001");

// 예시2:단순 문자열 읽기
string text = Get<string>("msg");

// 예시3:숫자 읽기
int count = Get<int>("visit_count");Code language: C# (cs)
  1. 직렬화·역직렬화 타입 불일치
    저장할 때 User를 넣고 읽을 때 Student로 받으면 Json 역직렬화 오류가 발생합니다.
  2. default(T)로 인한 null 검사 누락 주의
var model = Get<User>("key");
// 참조 타입이 없으면 model=null 이므로 model.Name 직접 접근 시 null 참조 오류 발생
if(model != null)
{

}Code language: C# (cs)
  1. 인코딩 통일
    쓰기와 읽기 모두 Encoding.UTF8 을 통일해서 사용해야 하며 그렇지 않으면 깨진 문자가 나타납니다.

값 가져오기

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다