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 짧은 키부터 삭제)
- 등등.