아빠는 개발자

[Redis] Redis cache 설계 - 이론편 본문

Redis

[Redis] Redis cache 설계 - 이론편

father6019 2024. 5. 17. 21:24
728x90
반응형

1. 캐싱 전략

캐싱 전략을 선택하는 것은 가장 중요한 부분 중 하나입니다. 일반적인 캐싱 전략은 다음과 같습니다

  • Write-Through Cache: 데이터가 캐시와 데이터베이스에 동시에 쓰입니다. 캐시와 데이터베이스가 항상 동기화되지만, 쓰기 작업의 성능이 저하될 수 있습니다.
  • Write-Back (Write-Behind) Cache: 데이터가 먼저 캐시에 쓰이고 나중에 데이터베이스에 비동기적으로 쓰입니다. 쓰기 성능은 향상되지만, 캐시 손실 시 데이터 손실 위험이 있습니다.
  • Read-Through Cache: 캐시에서 데이터를 찾을 수 없으면 데이터베이스에서 읽어와 캐시에 저장하고 반환합니다.
  • Cache-Aside (Lazy Loading): 애플리케이션이 먼저 캐시에서 데이터를 찾고, 없으면 데이터베이스에서 읽어와 캐시에 저장합니다. 가장 일반적인 방식입니다.

2. 만료 정책

캐시 데이터의 만료 정책을 설정하여 오래된 데이터를 자동으로 제거합니다.

  • TTL (Time-To-Live): 각 키에 대해 만료 시간을 설정합니다.
  • LRU (Least Recently Used): 자주 사용되지 않는 데이터를 제거합니다. Redis는 이를 위해 maxmemory-policy 설정에서 volatile-lru, allkeys-lru 등의 옵션을 제공합니다.
  • LFU (Least Frequently Used): 사용 빈도가 낮은 데이터를 제거합니다.

Redis 설정 파일(redis.conf)에서 maxmemory-policy 옵션을 사용하여 LRU 또는 LFU 정책을 설정할 수 있습니다.

maxmemory-policy allkeys-lru

3. 데이터 파티셔닝

데이터의 양이 많아질 경우 파티셔닝을 통해 여러 Redis 인스턴스에 데이터를 분산 저장합니다. Redis 클러스터를 사용하면 자동으로 데이터가 분산됩니다.

# redis.conf 설정 파일에서 Redis 클러스터 설정
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

4. 데이터 모델링

캐시할 데이터의 구조와 형식을 고려합니다.

  • Key Naming: 키 이름을 명확하고 일관되게 지정합니다.
    • user:1234:profile
  • Data Structures: Redis의 다양한 데이터 구조(Strings, Hashes, Lists, Sets, Sorted Sets)를 적절히 사용합니다.
# 문자열(Strings)
redis> SET user:1234:name "Alice"
OK

# 해시(Hashes)
redis> HSET user:1234 profile:name "Alice" profile:age 30
(integer) 2

# 리스트(Lists)
redis> LPUSH user:1234:visits "2023-05-17"
(integer) 1

# 집합(Sets)
redis> SADD user:1234:tags "premium" "active"
(integer) 2

# 정렬된 집합(Sorted Sets)
redis> ZADD user:1234:scores 100 "game1" 200 "game2"
(integer) 2

5. 장애 처리

Redis 인스턴스의 장애에 대비한 복구 계획을 세웁니다.

  • Replication: Redis는 마스터-슬레이브 복제를 지원합니다. 슬레이브 인스턴스는 마스터의 데이터를 복제하여 장애 시 빠른 복구를 도와줍니다.
복제 (Replication)

# 마스터 설정 (redis.conf)
replicaof <master-ip> <master-port>
  • Persistence: RDB 스냅샷이나 AOF(Append-Only File) 로그를 사용하여 데이터를 디스크에 저장합니다.
영속성 (Persistence)

# RDB 설정 (redis.conf)
save 900 1
save 300 10
save 60 10000

# AOF 설정 (redis.conf)
appendonly yes
appendfilename "appendonly.aof"
728x90
반응형