DB/Redis

Redis

잔망루피 2023. 5. 7. 16:44

Redis

  • 데이터의 원래 소스보다 더 빠르게 액세스할 수 있는 임시 데이터 저장소
  • 주로 변하지 않는 데이터, 반복적으로 액세스하는 같은 데이터를 캐시에 저장
  • 단순한 key-value 구조
  • In-memory 데이터 저장소
    • 서버 재시작 시 모든 데이터 유실
    • 복제 기능을 사용해도 실수 발생 시 데이터 복원 불가💀
    • Redis를 캐시 이외의 용도로 사용한다면 적절한 데이터 백업이 필요
  • 데이터를 영구 저장하는 방법
    • RDB
      • 바이너리 파일 형태로 저장된다.
      • 저장 당시 메모리에 있는 데이터 그대로를 사진 찍듯이 snapshot 방식으로 저장
      • 자동 👉 redis.conf 파일에서 SAVE 옵션(시간 기준)
      • 수동 👉 BGSAVE 커맨드를 이용해 cli 창에서 수동으로 RDB 파일 저장
        • SAVE 커맨드는 절대 사용 ❌
    • AOF(Append Only File)
      • 모든 명령어를 다 저장
      • Redis 프로토콜 형태로 저장된다.
      • 자동 👉 redis.conf 파일에서 auto-aof-rewrite-percentage 옵션(크기 기준)
      • 수동 👉 BGREWRITEAOF 커맨드를 이용해 CLI 창에서 수동으로 AOF 파일 재작성

 

Caching Strategies

  • 읽기 전략
    • Look-Aside(Lazy Loading)
      •  Redis가 죽더라도 DB에서 데이터를 가져오면 되기 때문에 서비스가 죽지 않는다.
        • ⚠️ 하지만, 갑자기 DB로 트래픽이 많이 몰릴 수 있다.
          • 이럴 때는 미리 DB에서 Cache로 데이터를 넣어주는 Cache Warming 방식을 사용할 수 있다.
      • ⭐ 기본적으로 Cache에서 데이터를 가져오고 없으면 DB에서 가져온다. 
      • Cache Miss
        • Cache에 데이터가 없으면 DB에서 가져온다.
      • Cache Hit
        • Cache에 있는 데이터를 가져온다.
  • 쓰기 전략
    • Write-Around
      • DB에만 데이터를 저장
      • Cache Miss가 발생하면 Cache에 DB에 있는 데이터를 저장 ➡️ 데이터 정합성 문제
    • Write-Through
      • DB에 데이터를 저장할 때 Cache에도 저장 ➡️ 상대적으로 느린 속도, 리소스 낭비

 

 

Redis의 자료 구조

  • Counting하기
    •  Strings
      • 단순 증감 연산
        • INCR / INCRBY / INCRBYFLOAD / HINCRBY / HINCRBYFLOAT / ZINCRBY
    • Bits
      • 데이터 저장공간 절약
      • 정수로 된 데이터만 카운팅 가능
    • HyperLogLogs
      • 대용량 데이터를 카운팅 할 때 적절
      • set과 비슷하지만 저장되는 용량이 12KB 고정되어 매우 작다.
      • 저장된 데이터는 다시 확인 불가능
    • Messaging하기
      • Lists
        • Blocking 기능을 이용해 Event Queue로 사용
        • 키가 있을 때만 데이터 저장 가능
          • LPUSHX / RPUSHX
          • ex) 이미 캐싱되어 있는 피드에만 신규 트윗을 저장
            • 트위터에서는 RPUSHX를 사용해서 피드에 새로운 데이터가 있을 때 추가
      • Streams
        • 로그를 저장하기 가장 적절한 자료구조
        • append-only
        • 시간 범위로 검색 / 신규 추가 데이터 수신 / 소비자별 다른 데이터 수신(소비자 그룹)

 

 

장애를 막기 위한 기본 설정값

STOP-WRITES-ON-BGSAVE-ERROR = NO

기본 값은 YES다.

RDB 파일 저장 실패 시 redis에 모든 write를 막는다.

MAXMEMORY-POLICY = ALLKEYS-LRU

 

redis를 캐시로 사용할 때 Expire Time 설정을 권장한다.

3가지 옵션이 있다.allkeys-lru 방식을 권장한다.

  • noeviction: 기본값. 기존에 저장된 키를 삭제를 안 한다. 새로 들어오는 키를 저장하지 않는다.
  • volatile-lru: 가장 최근에 사용하지 않은 키부터 삭제한다. 단, expire 설정이 있는 키만 해당한다.
  • allkeys-lru: 모든 키에 대해 lru 방식으로 키를 삭제한다. 데이터가 가득 차서 장애가 발생할 가능성은 적다. 

 

 


참고 👇

https://www.youtube.com/watch?v=92NizoBL4uA 

 

반응형

'DB > Redis' 카테고리의 다른 글

SpringBoot와 Redis Master-Slave 연동  (0) 2024.04.02
Redis-Sentinel  (0) 2024.04.02
Redis Class 및 Interface | 어노테이션 | redis-cli | 메소드  (0) 2022.07.27