값 쓰기

StackExchange.Redis 범용 Set/Get 쓰기 및 읽기

  1. 내부에서 IDatabase.StringSet() 를 호출하여 Redis 문자열 타입 데이터를 저장합니다
  2. 직렬화 규칙:임의 객체 → JSON 문자열 → UTF8 바이트 배열로 Redis에 저장
  3. 역직렬화 규칙:바이트 배열 읽기 → JSON 문자열 → 제네릭 대상 객체
  4. 반환값:true = 설정 성공,false = 설정 실패

가져와야 하는 네임스페이스

using StackExchange.Redis;
using Newtonsoft.Json;
using System.Text;Code language: CSS (css)

아래 예제는 Set에 키, 바이트 배열, 만료 시간을 전달하여 사용합니다.

/// <summary>
/// Redis 캐시에 쓰기
/// </summary>
/// <param name="key">캐시 키</param>
/// <param name="data">임의 객체</param>
/// <param name="cacheTime">만료 시간【분】</param>
/// <returns>true 성공 / false 실패</returns>
private bool Set(string key, object data, int cacheTime)
{
    if (data == null)
    {
        return false;
    }
    byte[] entryBytes = Serialize(data);
    TimeSpan expiresIn = TimeSpan.FromMinutes(cacheTime);
    return db.StringSet(key, entryBytes, expiresIn);
}

/// <summary>
/// 객체 직렬화:object → byte[]
/// </summary>
private byte[] Serialize(object data)
{
    string json = JsonConvert.SerializeObject(data);
    return Encoding.UTF8.GetBytes(json);
}

/// <summary>
/// 키로 캐시 읽어오기
/// </summary>
/// <typeparam name="T">대상 타입</typeparam>
/// <param name="key">캐시 키</param>
/// <returns>캐시가 없으면 default(T) 반환</returns>
public T Get<T>(string key)
{
    RedisValue rValue = db.StringGet(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);
    }
    string json = Encoding.UTF8.GetString(serializedObject);
    return JsonConvert.DeserializeObject<T>(json);
}Code language: PHP (php)

주의사항

  1. 시간 단위
    코드의 TimeSpan.FromMinutes(cacheTime)입력값 단위가【분】입니다
    폼에서 Set(key,val,1000) 호출하면 1000분 뒤 만료 되며 초가 아닙니다!

이전 폼 예제에서 1000 을 사용했는데 자주 실수하는 부분입니다.
단위를 사용하려면 TimeSpan.FromSeconds(cacheTime) 으로 수정하세요

  1. 의존 패키지 설치
    NuGet에서 두 패키지를 모두 설치해야 합니다:
  • StackExchange.Redis
  • Newtonsoft.Json
  1. 데이터 저장 형식
    모든 객체는 JSON 바이너리로 변환되어 Redis에 저장되며 Redis 클라이언트에서는 표준 JSON 텍스트로 보입니다.
  2. RedisValue 호환
    db.StringGet(key)RedisValue 를 반환하며 byte[] 로 암시적 변환이 가능하므로 바로 Deserialize<T> 에 전달할 수 있습니다.
  3. 스레드 안전 권장사항
    IConnectionMultiplexer 는 전역 싱글톤으로 유지하고 Redis 읽고 쓸 때마다 새 연결을 만들지 마세요.

사용 예시

// 쓰기 (30분 만료)
bool ok = Set("user:1001", new {Id = 1001, Name = "test"}, 30);

// 읽기
var user = Get<dynamic>("user:1001");

// 모델 클래스 읽기 예시
// var model = Get<UserInfo>("user:1001");Code language: JavaScript (javascript)

권장 사항

Redis 연결 코드와 이 메서드들을 RedisHelper.cs 독립 정적 헬퍼 클래스로 분리하고 Form 폼 코드에 넣지 않아야 관심사 분리가 이루어집니다.

값 쓰기

답글 남기기

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