Redis 만료 정책


(1) Passive Expiration (수동 만료)

  • 작동 원리:
    • 클라이언트가 특정 키에 접근(GET, SET 등)할 때마다
    • 해당 키의 TTL을 체크
    • TTL이 만료되어 있으면 그 즉시 키를 삭제하고 null 반환
  • 특징:
    • 시스템 부하가 없다 (접근 시만 확인)
    • 하지만 접근하지 않으면 만료된 키가 남아있을 수 있음
  • 예시: bash 복사 GET mykey # → TTL 만료 상태라면 mykey 삭제, 결과로 null 리턴

(2) Active Expiration (능동 만료)

  • 작동 원리:
    • Redis 서버가 주기적으로 만료된 키를 찾기 위해 백그라운드 스캔 수행
    • 오래된 Redis(6.0 이하): 무작위 샘플(Random Sampling)로 찾음
    • Redis 6.0 이상: 기수 트리(Radix Tree) 같은 구조로 만료시간 정렬 후 효율적 스캔
  • 특징:
    • 접근 없는 키도 자동으로 제거 가능
    • 주기 설정은 내부 알고리즘에 의해 자동 관리됨 (사용자 설정은 제한적)
  • 구체적 방법:
    • 랜덤하게 일부 키 샘플링
    • 만료된 키 삭제
    • 삭제된 키 비율이 높으면 더 오래/자주 스캔

(3) Lazy Expiration (지연 만료)

  • Passive Expiration과 비슷, 용어 차이만 있음.
  • "키에 접근했을 때만 만료 여부를 검사하고, 만료되면 그때 삭제한다"는 의미.
  • 성능 최적화를 위해 존재 (불필요한 스캔 방지).

(4) Periodic Scans (주기적 스캔)

  • Active Expiration의 일종.
  • Redis가 모든 데이터베이스를 일정 주기로 순회하며,
  • 랜덤하게 일부 키를 선택해서 만료 여부를 확인하고 삭제.
  • 시스템 부하를 제어하면서 만료 키를 빠르게 제거.

(5) Eviction Policies (삭제 정책)

  • Redis 메모리가 설정된 한계를 초과했을 때 동작.
  • 만료된 키뿐 아니라, 메모리 확보를 위해 특정 키를 제거할 수 있음.
  • 여러 정책 존재:
    • volatile-lru (TTL 설정된 키 중 LRU 삭제)
    • allkeys-lru (모든 키 중 LRU 삭제)
    • volatile-ttl (TTL 짧은 키부터 삭제)
    • 등등.