만료 정책

만료 정책 (Eviction Policy)

여기서는 Redis Enterprise Software에서 데이터베이스가 메모리 한도에 도달했을 때 어떤 일이 벌어지는지를 결정하는 만료 정책(eviction policy)을 설명해요. 메모리 한도에 도달하면 새 데이터를 위한 공간을 만들기 위해 선택된 정책에 따라 오래된 데이터가 만료(evict) 즉, 제거돼요.

출처: Redis 공식 문서 — eviction-policy (Redis Software)

만료 정책이란 (What eviction policy does)

만료 정책은 데이터베이스가 메모리 한도에 도달했을 때 어떤 일이 벌어지는지를 결정해요. 새 데이터를 위한 공간을 만들기 위해, 선택된 정책에 따라 오래된 데이터가 evicted(제거)돼요. 이를 방지하려면 데이터베이스가 모든 키를 담을 만큼 충분히 큰지 확인하세요.

클러스터된 데이터베이스에서 각 샤드(shard)는 자신의 메모리 사용량을 추적하고, 메모리 한도에 도달하면 만료를 트리거해요. 데이터가 샤드들에 고르지 않게 분포되어 있으면, 전체 데이터베이스 메모리 사용률이 설정된 한도보다 낮은데도 일부 샤드가 가득 차 키를 만료하기 시작할 수 있어요.

만료 정책 표 (Eviction policies)

만료 정책 설명
noeviction 메모리 한도에 도달하면 새 값이 저장되지 않아요. 데이터베이스가 복제(replication)를 사용할 때 이는 primary(주) 데이터베이스에 적용돼요
allkeys-lrm 가장 최근에 수정된 키는 유지하고, 가장 적게 수정된(least recently modified, LRM) 키를 제거해요
allkeys-lfu 자주 사용되는 키는 유지하고, 가장 적게 사용된(least frequently used, LFU) 키를 제거해요
allkeys-random 키를 무작위로 제거해요
volatile-lru expire 필드가 true로 설정된 키 중 가장 적게 사용된(least recently used) 키를 제거해요

추가 정책:

만료 정책 설명
noeviction 메모리 한도에 도달하면 새 값이 저장되지 않아요. 데이터베이스가 복제를 사용할 때 이는 primary 데이터베이스에 적용돼요
volatile-lfu expire 필드가 true로 설정된 키 중 가장 적게 사용된(least frequently used) 키를 제거해요

만료 정책 기본값 (Eviction policy defaults)

volatile-lru가 대부분의 데이터베이스의 기본 만료 정책이에요. Active-Active 데이터베이스의 기본 정책은 noeviction 정책이에요.

Active-Active 데이터베이스 만료 (Active-Active database eviction)

Active-Active 데이터베이스의 만료 정책 메커니즘은 모든 참여 클러스터에 전파(propagation)해야 하기 때문에 standalone 데이터베이스보다 더 일찍 시작돼요. 만료 정책은 Active-Active 인스턴스 중 하나의 샤드가 메모리 한도의 80%에 도달하면 키를 만료하기 시작해요.

  • 80% 임계값은 전체 데이터베이스 한도가 아니라 각 샤드의 메모리 한도에 적용돼요.
  • 키가 만료되는 동안에도 메모리 사용량이 계속 증가하면, out-of-memory 오류를 피하기 위해 만료율이 증가해요.
  • Redis Software는 고르지 않은 키 분포를 수용하고 out-of-memory 오류를 피하기 위해 개별 샤드에 더 높은 maxmemory 값을 할당하기도 해요.

데이터 만료 방지하기 (Avoid data eviction)

데이터 만료를 방지하려면 데이터베이스가 필요한 값을 담을 만큼 충분히 큰지 확인하세요. 더 큰 데이터베이스라면 Redis Flex 또는 Auto Tiering을 고려해 보세요.

더 알아보기 (Learn more)