콘텐츠로 이동

캐시 만료·퇴출 정책 (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 등)가 다르므로, 사용 버전 공식 문서를 재확인하세요. (확인 필요)

더 알아보기