Redis는 메모리 기반 데이터 저장소이므로, 메모리 관리가 시스템 성능에 중요한 영향을 미친다. 데이터를 메모리에 계속 쌓아두면 메모리 부족 문제가 발생할 수 있다. 이번 포스트에서는 Redis의 메모리 관리와 성능 최적화를 위한 주요 설정과 방법을 알아본다.

1. Redis 메모리 관리의 중요성

Redis는 모든 데이터를 메모리에 저장해 빠르게 처리한다. 대량의 데이터를 저장하거나 지속적으로 쓰기 작업이 발생하면 메모리 부족으로 성능 저하가 발생할 수 있다. 이러한 문제를 방지하기 위해 Redis는 maxmemorymaxmemory-policy 설정을 제공한다.

Redis memory management infographic

2. 메모리 제한 설정: maxmemory

최대 메모리 사용량을 제한하려면 maxmemory를 설정한다. 이 설정을 통해 Redis가 사용할 메모리 용량을 명확히 지정할 수 있다. 만약 maxmemory 설정이 없으면, 시스템 메모리 허용 범위까지 사용할 수 있다.

maxmemory 256mb  # 예: 256MB로 설정

위 설정을 통해 지정된 메모리 한도를 초과할 경우 Redis는 데이터 삭제 정책에 따라 오래된 데이터를 자동으로 제거할 수 있다.

3. 메모리 삭제 정책 설정: maxmemory-policy

메모리 제한을 초과했을 때 삭제할 데이터를 결정하는 정책이 maxmemory-policy다. Redis는 다양한 삭제 정책을 제공하며, 주요 옵션은 다음과 같다:

  • noeviction: 새 데이터 저장을 거부하여 데이터 손실을 최소화
  • allkeys-lru: 모든 키 중 가장 오랫동안 사용되지 않은 키를 삭제해 캐시 용도로 적합
  • volatile-lru: 만료 시간이 설정된 키들 중 가장 오랫동안 사용되지 않은 키 삭제
  • allkeys-random: 모든 키 중에서 임의로 데이터를 삭제
  • volatile-ttl: 만료 시간이 가장 짧게 남은 키 삭제

예를 들어, 모든 키 중 오래된 데이터를 삭제하는 LRU 정책을 설정하려면 다음과 같이 설정한다.

maxmemory-policy allkeys-lru

4. 메모리 최적화 설정: maxmemory-samples

maxmemory-samples 옵션은 메모리 정책을 적용할 때 삭제할 데이터를 샘플링하는 개수를 설정하며, 기본값은 5다. 샘플링 수를 높이면 더 정확한 정책이 적용되지만, CPU 자원이 많이 소모될 수 있다.

maxmemory-samples 5

5. 데이터 압축과 삭제를 위한 TTL 설정

Redis는 키마다 TTL(만료 시간)을 설정할 수 있으며, 특정 키가 만료되면 자동으로 삭제해 메모리를 확보한다. 세션 관리나 캐시 데이터에 유용하다.

EXPIRE <key> <seconds>  # 예: session_data를 1시간 후 만료

TTL 설정된 데이터는 시간이 지나면 자동 삭제되므로 메모리 절약에 효과적이다.

6. 메모리 모니터링과 성능 점검 명령어

Redis는 메모리 상태를 모니터링하고 성능을 점검할 수 있는 명령어를 제공한다.

  • INFO memory: 전체 메모리 사용량을 확인
  • MEMORY USAGE <key>: 특정 키의 메모리 사용량을 확인
  • MEMORY STATS: 세부적인 메모리 통계 제공
  • SLOWLOG: 오래 걸린 명령어 확인으로 성능 점검 가능
redis-cli INFO memory
redis-cli MEMORY USAGE session_data
redis-cli SLOWLOG GET

7. 실전 예시: 캐시 데이터와 작업 큐를 위한 Redis 메모리 최적화

Redis에서 캐시 데이터 용도로 allkeys-lru 정책을 사용해 오래된 데이터를 자동 삭제할 수 있다. 반면, 작업 큐와 같이 데이터 보존이 중요한 경우에는 noeviction 정책을 설정하고 AOF(Append-Only File) 기능을 사용해 데이터 복구 가능하도록 설정할 수 있다.

maxmemory 256mb
maxmemory-policy allkeys-lru  # 캐시 데이터에 적합

appendonly yes
appendfsync everysec
maxmemory-policy noeviction  # 작업 큐에 적합

마치며

Redis의 메모리 관리와 성능 최적화 방법을 살펴보았다. Redis는 메모리 기반 데이터베이스이므로 메모리 관리 설정이 중요하며, 이를 통해 성능과 데이터 보존을 조절할 수 있다. 다음 편에서는 Docker를 사용해 Redis 컨테이너를 운영하는 방법을 다룬다. Redis를 독립 컨테이너로 설정해 효율적인 데이터 보존과 성능을 유지하는 방법을 알아보자.