Blog
컴퓨터 공학
Database
Redis
레디스 메모리 정책

최대 메모리 사용량 제한

replication이나 persistence를 활용할시 Redis는 복제본이나 AOF 파일에 기록될 업데이트 집합을 저장하기 위해 일부 RAM을 버퍼로 사용합니다. 그렇기 때문에 메모리 제한을 할 때 어느정도의 램 용량을 비워두는 편이 좋습니다.

  • CLI
CONFIG SET maxmemory 100mb
maxmemory 100mb

레디스 메모리 교체정책

  • noeviction: 키가 제거되지 않으며, 새로운 데이터를 캐시하려는 명령을 실행할 때 서버가 오류를 반환합니다. 데이터베이스가 복제를 사용하는 경우 이 조건은 기본 데이터베이스에만 적용됩니다. 단, 기존 데이터를 읽기만 하는 명령은 정상적으로 작동합니다.
    • 금융 거래 데이터와 같이 데이터 손실이 절대 발생해서는 안 되는 경우
  • allkeys-lru: 가장 오랫동안 사용되지 않은(LRU) 키를 제거합니다.
    • 소셜 미디어 피드 캐싱: 최근에 조회된 게시물은 유지하고 오래된 게시물은 제거
    • 제품 카탈로그: 자주 조회되는 제품 정보는 캐시에 유지
    • 세션 관리: 활성 사용자의 세션은 유지하고 비활성 세션은 제거
  • allkeys-lfu: 가장 적게 사용된(LFU) 키를 제거합니다.
    • CDN 캐싱: 인기 있는 콘텐츠는 캐시에 유지
    • 검색 자동완성: 자주 검색되는 키워드는 캐시에 유지
    • 게임 리더보드: 자주 조회되는 상위 랭킹 데이터 유지
  • allkeys-random: 키를 무작위로 제거합니다.
    • 모든 데이터의 중요도가 비슷한 경우
  • volatile-lru: 만료 필드가 true로 설정된 키 중에서 가장 오랫동안 사용되지 않은 키를 제거합니다.
    • 사용자 세션 데이터: 만료 시간이 있는 세션 중 최근에 사용되지 않은 세션 제거
    • 임시 토큰 저장소: 만료 예정인 토큰 중 사용되지 않는 것 우선 제거
    • 캐시된 API 응답: TTL이 설정된 응답 중 최근 사용되지 않은 것 제거
  • volatile-lfu: 만료 필드가 true로 설정된 키 중에서 가장 적게 사용된 키를 제거합니다.
    • 임시 파일 캐시: 만료 시간이 있는 파일 중 사용 빈도가 낮은 것 제거
    • 웹 세션 스토리지: 만료 예정인 세션 중 접근 빈도가 낮은 것 제거
    • API 응답 캐시: TTL이 있는 응답 중 조회 빈도가 낮은 것 제거
  • volatile-random: 만료 필드가 true로 설정된 키 중에서 무작위로 키를 제거합니다.
    • ttl이 설정된 데이터의 중요도가 비슷한 경우
  • volatile-ttl: 만료 필드가 true로 설정된 키 중에서 남은 수명이 가장 짧은 키를 제거합니다.
    • OTP(일회용 비밀번호): 곧 만료될 코드 우선 제거
    • 임시 URL: 만료 시간이 임박한 URL 우선 제거
    • 캐시된 외부 API 응답: 만료가 가까운 데이터 우선 제거

volatile-xxx 정책은 expire 필드가 true로 설정된 키가 없거나, volatile-ttl의 경우, 만료 시간 값이 설정된 키가 없으면 noeviction처럼 동작합니다.

INFO 명령어

INFO 명령은 캐시 성능을 확인하는 데 유용한 여러 데이터를 제공합니다. 특히, INFO stats 섹션에는 두 가지 중요한 항목이 포함되어 있습니다. keyspace_hits(캐시에서 키가 성공적으로 발견된 횟수)와 keyspace_misses(키가 요청되었지만 캐시에 없었던 횟수)입니다. 아래 계산은 캐시에서 만족된 시도된 접근의 비율을 제공합니다:

keyspace_hits / (keyspace_hits + keyspace_misses) * 100

Reference

https://redis.io/docs/latest/develop/reference/eviction/ (opens in a new tab)