[개발자를 위한 레디스] 캐시의 데이터 흐름

박상준·2024년 6월 22일
0

REDIS

목록 보기
16/20

데이터 흐름

  • 캐시는 데이터 스토어의 데이터를 임시로 저장해 사용자가 자주 접근하는 데이터를 빠르게 제공하는 저장소임
  • 캐시는 DB보다 적은 양의 데이터를 저장, 주로 메모리에 저장되어 빠른 접근 속도를 제공함.

만료 시간(TTL : Time To Live)

  • 레디스 만료 시간은 데이터가 얼마나 오래 저장될 것인지를 나타내는 시간임.
  • 시간이 지나면 자동으로 삭제된다.

키 삭제

  • 레디스는 키가 만료되어도 바로 메모리에서 삭제되는 것이 아님.
  • 2 가지 방식으로 키를 삭제한다.

1. Passive 방식

  • 클라이언트가 키에 접근하려고 하는 경우 만료된 키가 발견되면 메모리에서 삭제

2. Active 방식

  • TTL 값이 있는 키 중 일부를 주기적으로 선택해 만료된 키를 삭제한다.
  • 일정 비율 이상의 키가 삭제되었는지 확인.
    • 그렇지 않으면 다른 키를 검사한다.
    • 해당 과정을 주기적으로 반복.

레디스 메모리 관리와 maxmemory-policy 설정

  • 레디스는 데이터 최대 저장 용량을 설정하는 maxmemory 와 해당 용량을 초과할 때의 처리 방식을 결정하는 maxmemory-policy 를 제공함.
  • maxmemory 설정
    • 레디스 할당할 최대 메모리 용량을 설정함.
    • 설정 값을 초과하는 경우 maxmemory-policy 에 따라 데이터를 삭제한다.
  • maxmemory-policy 설정값
    • 여러가지 설정 값이 존재한다.
    1. Noeviction
      • 기본값임.
      • 동작방식
        • 메모리가 가득차도 임의로 데이터 삭제하지 않음.
        • 더 이상 데이터를 저장할 수 없다는 에러를 반환
      • 언제 쓰나?
        • 데이터의 관리를 애플리케이션에서 직접 처리할 때 사용
        • 캐시 데이터가 삭제되면 안 되는 중요한 경우에 적합
    2. LRU (Least Recently Used) Eviction
      • 가장 최근에 사용되지 않은 데이터부터 삭제.
      • 자주 사용되지 않는 데이터를 먼저 삭제하여 자주 사용하는 데이터를 오래 유지함.
      1. volatile-lru
        • 동작
          • 만료 시간이 설정된 키에 한해 LRU 방식으로 키를 삭제
        • 언제 쓰나?
          • 특정 데이터만 만료 시간을 설정하고 싶은 경우 유용하다.
          • 모든 키에 만료 시간이 설정되지 않은 경우 noeviction 과 동일한 상황이 발생할 수 있음.
      2. allkeys-lru
        • 동작
          • 모든 키에 대해 LRU 알고리즘을 적용해 데이터를 삭제한다.
        • 언제 쓰나?
          • 레디스를 캐시로 사용할 때 일반적으로 권장됨.
          • 메모리가 가득 찬 경우 장애 상황을 방지할 수 있다.
    3. LFU Eviction ( Least-Frequently User)
      • 캐시 메모리가 가득 찼을 때 가장 자주 사용되는 않은 데이터를 삭제하는 정책.
      • 자주 사용되지 않은 데이터는 나중에도 엑세스될 가능성이 낮다는 가정에 기반
      • 특징
        • 우선 순위
          • 키의 엑세스 패턴에 따라 우선순위가 유동적으로 변경됨.
          • 오랫동안 사용되지 않았어도 과거에 자주 엑세스된 키는 높은 우선순위를 가지게됨.
        • 설정
          • volatile-lfu
            • 만료 시간이 설정된 키에 대해 LFU 방식 적용.
            • 특정 상황에서 장애 유발가능
          • allkeys-lfu
            • 모든 키에 대해 LFU 알고리즘 사용하여 데이터 삭제
      • 주의
        • LFU 와 LRU 모두 근사 알고리즘
        • 가장 오래 사용되지 않거나 자주 사용되지 않은 키를 정확하게 찾지 않는다.
          • CPU 와 메모리 리소스 절약을 위한 레디스 자체 정책임
    4. RAMDOM Eviction
      • 캐시에 저장된 키 중 하나를 임의로 골라 삭제
      • 특징
        • 부하 감소
          • 키를 별도로 계산하여 삭제하지 않기에 레디스 부하 감소
        • 데이터 손실
          • 나중에 사용되는 키를 삭제할 가능성이 있음.
      • 설정값
        • volatile-random
          • 만료 시간이 설정된 키 중 임의로 키 삭제
        • allkeys-random
          • 모든 키 중 임의 키 삭제
    5. volatile-ttl
      • 만료 시간이 가장 짧은 키를 삭제
      • 삭제 예정 시간이 가까운 키를 미리 삭제한다

예시

  • LFU
    • 온라인 게임 세션 데이터 캐시에서 자주 사용되지 않는 세션 데이터를 우선적으로 삭제함.
    • 중요한 데이터 보존을 최대화 가능
  • RAMDOM Eviction 부적절한 사용
    • 웹 서버 캐시에서 랜덤으로 데이터 삭제시, 자주 참조되는 데이터가 삭제될 수 있음.
    • 캐시 히트율이 급격히 떨어질 수 있음..
profile
이전 블로그 : https://oth3410.tistory.com/

0개의 댓글