캐시 만료·퇴출 정책 (Expiration & Eviction)¶
캐시를 잘 쓰려면 "언제, 얼마나 자주 버릴지"를 정하는 만료(expire)와 메모리 퇴출(eviction) 정책이 필수입니다. 제대로 잡지 않으면 Redis 가 메모리를 계속 잡아먹거나, 오래된 데이터가 남아 신선도가 떨어집니다. 이번 장은 Redis 의 만료·퇴출 동작과 데이터스케쳐스 실무 설정법을 정리합니다.
키 만료 (Expiration)¶
키마다 TTL(생존시간)을 지정하면 시간이 지나 자동 삭제됩니다.
EXPIRE key seconds/SET key val EX seconds로 부여.- 능동(active) 만료: Redis 가 주기적으로 일부 키를 랜덤 샘플링해 만료된 키 제거.
- 수동(lazy) 만료: 키에 접근할 때 이미 만료면 삭제.
TTL key로 남은 시간 조회.
메모리 퇴출 (Eviction)¶
maxmemory 한계에 도달하면 퇴출 정책(maxmemory-policy)에 따라 기존 키를 버려 새 쓰기를 수용합니다.
| 정책 | 동작 |
|---|---|
noeviction |
새 쓰기 거부(에러) — 데이터 보존 우선 |
allkeys-lru |
전체 키 중 LRU(최근 사용 안 한 것) 퇴출 |
volatile-lru |
TTL 있는 키 중 LRU 퇴출 (권장 시작점) |
allkeys-lfu / volatile-lfu |
사용 빈도(LFU) 기반 퇴출 |
allkeys-random / volatile-random |
랜덤 퇴출 |
volatile-ttl |
TTL이 짧은 키부터 퇴출 |
즉 "캐시로만 쓰는 키는 지워져도 되고, 소중한 데이터는 만료 없이 보존"하는 구분이 퇴출 정책 선택의 핵심입니다.
데이터스케쳐스 실무 관점¶
- 세션·조회 캐시: 사용자 세션이나 자주 조회하는 설정값은
volatile-lru로 두고, 각 키에 적절한 TTL을 부여해 신선도와 메모리 사용을 균형 잡습니다. - 눈금 분류: 만료돼도 되는(재생산 가능) 캐시 키와 보존해야 하는 키를 명확히 나눠, 잘못된 퇴출로 중요한 데이터가 날아가지 않게 합니다.
maxmemory를 충분히 잡고 모니터링(메모리 사용률·evicted_keys)을 걸어 회귀를 잡으세요.
확인 필요¶
- 퇴출 정책·만료 동작은 Redis 버전에 따라 세부(LRM 등)가 다르므로, 사용 버전 공식 문서를 재확인하세요. (확인 필요)
더 알아보기¶
- 1차(공식): Redis — Key eviction
- 1차(공식): Redis — Config